2

http://www.example.com/images/123.pngなどの URL への呼び出しをスタブして、123.png という名前の画像を返すにはどうすればよいですか?

Rails 3.2、Carrierwave を使用しています。私は Fakeweb を試しましたが、少し困惑しました。

4

1 に答える 1

3

数時間の調査の後、それは簡単であることがわかりました。

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

私の問題はもっとトリッキーです:
私は FB アバターをテストしていて、whitelst エクステンションを取得しました

拡張機能がないため、上記のコードは機能しません
(FB アバター URL: https://graph.facebook.com/123/picture )

しかし、実際の FB アバターは、CDN または拡張子を持つ何かにリダイレクトするため、
別のスタブを追加する必要があります。

# 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
于 2012-09-22T03:27:11.310 に答える