Подтвердить что ты не робот

Factory с полем переноса несущей

Здравствуйте, мне нужно создать Factory для моей модели, например

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" в поле моего логотипа, и это не работает, как оценить это поле? Im использует CarrierWave для загрузки.

4b9b3361

Ответ 1

Вам нужно включить ActionDispatch::TestProcess в свой factory (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, иначе вы получите сообщение об ошибке, что файл не существует.

Ответ 2

Если вы не хотите включать 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

Вот как они предлагают сделать это на своей вики https://github.com/jnicklas/carrierwave/wiki/How-to%3A-Use-test-fixtures