ruby-on-rails - 使用载波图像的 Rails Rspec 测试

标签 ruby-on-rails ruby rspec

我写了一个 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/

相关文章:

ruby-on-rails - 我可以记录未处理的 VCR 请求正文吗?

ruby - 默认的 Ruby 访问器方法?

ruby - 使用 RSpec 模拟 TCPSocket

ruby-on-rails - 是否应该在 Cucumber 功能中测试所有验证规则?

javascript - Facebook 分享按钮使用动态 og 标签进行测验

ruby-on-rails - 未初始化的常量 ActiveSupport::Dependencies::Mutex

ruby-on-rails - 尝试从纬度/经度创建点的 RGeo 错误

ruby-on-rails - Devise - 如何禁止某些用户登录?

ruby - ruby 中的冒号前缀字符串

ruby - "page.should_not have_content"和 "page.should have_no_content"之间的区别