2012-03-28 5 views
4

Carrierwave + FactoryGirlでアップロードをテストする方法:私は私のfactories.rbファイル上でこれを持っているので、私は私のアプリのためにいくつかのテストを作成したいと、私は次のエラー持っ

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)>' 

このエラーはあるが

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 

(別売: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 
関連する問題