Как проверить загрузку с Carrierwave + FactoryGirl - PullRequest
4 голосов
/ 28 марта 2012

Я хочу создать несколько тестов для своего приложения, и у меня появляется следующая ошибка:

1) User feeds ordering should order feeds by id desc
     Failure/Error: @post_1 = FactoryGirl.create(:post)
     ActiveRecord::AssociationTypeMismatch:
       Attachment(#87413420) expected, got Rack::Test::UploadedFile(#81956820)
     # ./spec/models/user_spec.rb:37:in `block (3 levels) in <top (required)>'

Эта ошибка из-за того, что у меня есть это в моем factories.rb файле

  factory :post do
    title "Lorem Ipsum"
    description "Some random text goes here"
    price "500000"
    model "S 403"
    makes "Toyota"
    prefecture "Aichi-ken"
    contact_info "ryu ryusaki"
    year "2012"
    shaken_validation "dec/2014"
    attachments [ Rack::Test::UploadedFile.new(Rails.root.join("spec/fixtures/files/example.jpg"), "image/jpeg") ]
    #attachments [ File.open(Rails.root.join("spec/fixtures/files/example.jpg")) ]
  end

Тест ожидает объект Attachment, но я создаю объект Rack::Test::UploadedFile. Как я могу решить эту ошибку?

Спасибо.

Ответы [ 3 ]

9 голосов
/ 31 марта 2012

Я столкнулся с вашим вопросом, ища тот же ответ. Пожалуйста, проверьте это:

Как использовать Factory Girl для создания скрепки?

удачи!

Обновление:

Итак, вот что я сделал шаг за шагом, чтобы загрузить файл на свои фабрики.rb.

A. Так как я использую rspec, я создал каталог fixtures в spec / и каталог images в spec / fixtures /, а затем поместил туда изображение example.jpg, так что путь был Rails.root / spec / fixtures / images / example .jpg

B. Затем в своем файле factories.rb я изменил свое определение следующим образом:

Factory.define :image do |image|
  image.image  fixture_file_upload( Rails.root + 'spec/fixtures/images/example.jpg', "image/jpg")
  image.caption           "Some random caption"
end

(необязательно: перезапустите сервер spork, если в rspec)

C. Теперь должно нормально работать.

Дайте мне знать, если у вас есть другие проблемы. Я сделаю все возможное, чтобы помочь:)

5 голосов
/ 31 марта 2012

Я нашел способ делать то, что мне нужно.

factory :attachment do
  file { fixture_file_upload(Rails.root.join(*%w[spec fixtures files example.jpg]), 'image/jpg') }
end

factory :post do
  title "Lorem Ipsum"
  description "Some random text goes here"
  price "500000"
  model "S 403"
  makes "Toyota"
  prefecture "Aichi-ken"
  status 'active'
  attachments { [ FactoryGirl.create(:attachment) ] }
end
2 голосов
/ 07 ноября 2016

Еще один способ сделать то же самое:

factory :user do
  avatar File.open("#{Rails.root}/spec/fixtures/sample.jpg", 'r')
end
...