2012-03-28 3 views
4

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

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. Как я могу решить эту ошибку?

Спасибо.

ответ

9

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

How Do I Use Factory Girl To Generate A Paperclip Attachment?

удачи!

обновление:

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

A. Поскольку я использую rspec, я создал каталог в соответствии со спецификацией/и изображениями каталогов под 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. Должен теперь работать нормально.

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

+0

Спасибо. Я нашел ответ вчера, просто забыл обновить свой пост здесь. Поэтому я буду принимать ваш ответ как правильный. :) –

+0

Удивительный! Надеюсь, это может быть полезно кому-то в будущем. – sybohy

+0

Я использую Rails 4, и fixture_file_upload добавлял Rails.root, поэтому мне просто пришлось todo fixture_file_upload ("example.csv") – jspooner

5

Так я нашел для себя то, что мне нужно.

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 
+0

хотел указать другим, используя скобки '{}', показанные в этом ответе, вокруг Мне помог вызов fixture_file_upload(). без скобок я получал ошибку. – FireDragon

2

Другой способ сделать то же самое:

factory :user do 
    avatar File.open("#{Rails.root}/spec/fixtures/sample.jpg", 'r') 
end 
Смежные вопросы