2016-10-04 114 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

啊,很好!编辑。谢谢! –