20

こんにちは私は私のモデルのためにファクトリーを構築する必要があります、例えば

Factory.define :farm do |f|
  f.name { Factory.next :name }
  f.harvest '3'
  f.offers 'Random'
  f.latitude '43'
  f.longitude '-70'
  f.about 'We rocks!'
  f.logo { Factory.next :logo } # this doesn't work
end

今のところ、文字列 "#{n} .jpg"をロゴフィールドに渡すだけですが、これは機能しません。このフィールドを評価するにはどうすればよいですか?アップロードにCarrierWaveを使用しています。

4

2 に答える 2

35

ActionDispatch::TestProcessファクトリ(Rails 3)に含め、fixture_file_uploadヘルパーを使用する必要があります。

include ActionDispatch::TestProcess

FactoryGirl.define do
  factory :image do
    title "Example image"
    file { fixture_file_upload("files/example.jpg", "image/jpeg") }
  end
end

また、必ずでサンプルファイルを作成してtest/fixtures/files/example.jpgください。そうしないと、ファイルが存在しないというエラーが発生します。

于 2011-12-23T00:32:58.173 に答える
25

含めたくない場合は、ActionDispatch::TestProcess次のようなファイルを追加できます。

Factory.define :brand do |f|
  f.name "My Brand"
  f.description "Foo"
  f.logo { Rack::Test::UploadedFile.new(File.join(Rails.root, 'spec', 'support', 'brands', 'logos', 'logo_image.jpg')) }
end

次に、その指定されたパスにファイルを含めるだけです。この場合は次のようになりますspec/support/brands/logos/logo_image.jpg

これは、wiki https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Use-test-fixturesで行うことを提案する方法です。

于 2013-02-05T16:54:04.557 に答える