2012-07-27 1 views

Répondre

3

Après quelques heures de recherche, se révèle qu'il est simple:

FakeWeb.register_uri(:get, string_or_regxp_of_uri, 
     body: SupportFiles.uploaded_file("square.jpg"), 
     content_type: 'image/jpg') 

Mon problème est plus délicat:
Je teste avatar FB, et je suis arrivé l'extension whitelst

Le code ci-dessus ne fonctionnera pas puisque l'extension est manquante
(URL avatar FB: https://graph.facebook.com/123/picture)

Mais l'avatar réel FB rediriger vers un CDN ou quelque chose qui h comme l'extension
Vous avez donc besoin d'ajouter un autre bout:

# Register a fake remote image 
fake_avatar_uri = "https://graph.facebook.com/fake_avatar.jpg" 
# Redirect to a fake uri 
FakeWeb.register_uri(:get, %r|https://graph\.facebook\.com/|, 
    status: ["301", "Moved Permanently"], 
    location: fake_avatar_uri) 
# Feed fake image for the fake uri 
FakeWeb.register_uri(:get, fake_avatar_uri, 
    body: SupportFiles.uploaded_file("square.jpg"), 
    content_type: 'image/jpg') 

Le module SupportFiles (pas écrit par moi-même: P):

require 'rack/test/uploaded_file' 

module SupportFiles 
    extend ActiveSupport::Concern 

    included do 
    let(:an_image) do 
     open_file("square.jpg") 
    end 
    end 


    def open_file(filename) 
    File.open(support_file_path(filename)) 
    end 

    # idea stolen from ActionDispatch::TestProcess#fixture_file_upload 
    def uploaded_file(filename) 
    Rack::Test::UploadedFile.new(support_file_path(filename)) 
    end 
    module_function :uploaded_file 

    protected 

    def support_file_path(filename) 
    Rails.root.join("spec/support/files", filename) 
    end 
    module_function :support_file_path 

end 
Questions connexes