ruby-on-rails 使用时间助手进行测试

x4shl7ld  于 11个月前  发布在  Ruby
关注(0)|答案(1)|浏览(105)

我正在使用Rails 6中包含的标准工具进行测试。这是一个非常简单的测试,但似乎freeze_time不起作用,并且错误代码很难辨别原因。
下面是我正在执行的测试:


的数据
下面是运行测试后的错误:


goucqfw6

goucqfw61#

当你创建一个新的Person时,created_at的值应该被设置(假设它已经应用了timestamps),但是因为你得到的是nil,所以几乎可以肯定你的Person创建失败了。可能是由于它试图保存时的验证错误。你可以查看模型的错误条目来确定。
要显示错误以供查看,请执行以下操作:

class PersonTest < ActiveSupport::TestCase
  test 'created at matches current time' do
    freeze_time
    assert_equal(Time.current, Person.create!.created_at)
  end
end

字符串
如果它是一个验证错误,你可以绕过这些:

class PersonTest < ActiveSupport::TestCase
  test 'created at matches current time' do
    freeze_time
    person = Person.new.save(validate: false)
    assert_equal(Time.current, person.created_at)
  end
end


不过,这有两个问题。
1.在测试过程中,您希望尽可能避免保存到数据库中,以保持测试的性能。
1.你实际上是在测试Rails的内置功能。这是一个你不应该执行的测试。可能有一个更好的测试来检查Rails timestamps已经应用到你的Person模型,但我以前从没写过(我为 * 所有 * 写测试)。没有办法在一个简单的提交中意外地消除timestamps。(这需要整个意外的迁移),所以测试它们的存在感觉有点大材小用。

相关问题