2012-07-27 91 views

回答

3

研究了几个小时后,原来很简单:

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

我的问题是比较棘手:
我测试FB头像,和我whitelst扩展

将上面的代码不工作,因为扩展名缺失
(FB头像网址:https://graph.facebook.com/123/picture

但真正的FB头像将重定向到CDN或什么是h作为扩展
所以你需要添加另一个存根:

# 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') 

的SupportFiles模块(不我自己写的: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 
相关问题