2016-10-04 10 views
1

最新の5ニュースレターとその画像を返すことができるAPIを書いたが、そのrspecテストを書いたところで止まっている。Rails Rspec test with carrierwave画像

まず、モデル間の関係を示します。

Newsletter has_many NewsletterImages 
NewsletterImage belong_to Newsletter 

第二に、私は私がテストデータベース内のいくつかのデータを作成する必要があると思ったので、私はrspecファイルに次のコードを書きました。

7.times do |i| 
    n = Newsletter.create(title: "Test#{i}", content: "TestContents#{i}") 
    2.times do |i| 
    ni = NewsletterImage.create(newsletter_id: n.id, order: i) 
    ni.image = File.open('xxx.png') 
    ni.save 
    end 
end 

私は非常にテストでファイルをアップロードする必要がありますか?データとテストを生成する良い方法はありますか?

答えて

3

Factory Girlを使用してテストデータを作成したほうがよい。そうすれば、あなたは

モデルが工場定義ファイルに隠された作成方法の詳細のすべてに
# /spec/factories/newsletter_factory.rb 
FactoryGirl.define do 
    factory :newsletter do 
    title "My newsletter" 
    content "Some content" 
    end 
end 

# /spec/factories/newsletter_image_factory.rb 
FactoryGirl.define do 
    factory :newsletter_image do 
    newsletter 
    image fixture_file_upload(Rails.root + 'spec/fixtures/images/example.jpg', "image/jpg") 
    end 
end 

# spec/models/newsletter_spec.rb 
image = create :newsletter_image 
expect(image.newsletter.title).to eq 'My Newsletter' 

のようなきれいなテストを書くことができ、それは多くのテスト間でコードを共有するために、その後は簡単です。ファクトリー・ガールの定義にcarrierwaveファイルを追加する方法についての詳細については

、などこの1など他の回答を探す:https://stackoverflow.com/a/9952914/693349

+0

おかげで、私はいくつかの方向性を持っています。 –

+0

ところで、それは 'title 'でなければなりません。私のニュースレター' 'と' content "いくつかのコンテンツ" '、余分な': 'を削除します。 –

+0

ああ、いいキャッチ!編集されました。ありがとう! –

関連する問題