我写了一个 API 可以返回最新的 5 Newsletter 和它的图片,但是我一直在写它的 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
那么,我需要在非常测试中上传文件吗?有没有更好的方法来生成数据和测试?
最佳答案
更好用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'
由于模型创建方式的所有细节都隐藏在工厂定义文件中,因此可以轻松地在多个测试之间共享代码。
有关将载波文件添加到 Factory Girl 定义的更多详细信息,请查找其他答案,例如:https://stackoverflow.com/a/9952914/693349
关于ruby-on-rails - 使用载波图像的 Rails Rspec 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39848413/