2016-10-04 79 views
1

我寫了一個API可以返回最新的5時事通訊和它的形象,但我堅持在寫它的rspec測試。導航Rspec測試與載波圖像

首先,這裏是模型之間的關係。

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文件工廠女孩的定義更詳細,尋找其他的答案,比如這個:https://stackoverflow.com/a/9952914/693349

+0

謝謝,我有一些方向。 –

+0

順便說一句,它應該是'title'我的通訊「'和'content」有些內容',刪除多餘的':'。 –

+0

啊,很好!編輯。謝謝! –