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条答案
按热度按时间goucqfw61#
当你创建一个新的
Person
时,created_at
的值应该被设置(假设它已经应用了timestamps
),但是因为你得到的是nil
,所以几乎可以肯定你的Person
创建失败了。可能是由于它试图保存时的验证错误。你可以查看模型的错误条目来确定。要显示错误以供查看,请执行以下操作:
字符串
如果它是一个验证错误,你可以绕过这些:
型
不过,这有两个问题。
1.在测试过程中,您希望尽可能避免保存到数据库中,以保持测试的性能。
1.你实际上是在测试Rails的内置功能。这是一个你不应该执行的测试。可能有一个更好的测试来检查Rails
timestamps
已经应用到你的Person
模型,但我以前从没写过(我为 * 所有 * 写测试)。没有办法在一个简单的提交中意外地消除timestamps
。(这需要整个意外的迁移),所以测试它们的存在感觉有点大材小用。