我写了一个API,它可以返回最新的5通讯和它的图像,但我仍然坚持编写它的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所以,我需要上传文件在非常测试?是否有更好的方法来生成数据和测试?
发布于 2016-10-04 09:56:06
最好使用工厂女孩来生成测试数据。这样,您就可以编写干净的测试,例如
# /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'了解了如何在工厂定义文件中创建模型的所有细节之后,就很容易在多个测试中共享代码。
有关向“工厂女孩”定义中添加载波文件的更多详细信息,请查找其他答案,如以下所示:https://stackoverflow.com/a/9952914/693349
https://stackoverflow.com/questions/39848413
复制相似问题