使用assert_equal
时,我的功能测试中出现错误:
1) [31mFailure[0m:
test_should_allow_dealer_to_extend_offer:21
<Thu, 14 Apr 2011 23:59:59 PDT -07:00> expected but was
<Thu, 14 Apr 2011 23:59:59 PDT -07:00>.
请注意,两者显示相同的时间和时区。我检查了它们是同一类类型(ActiveSupport :: TimeWithZone)。那他们为什么不相等?
这是数据库中的标准DateTime字段,我认为它只存储到第二个右边?
我可以通过将它们转换为整数或使用范围为1分钟的assert_in_delta
来传递它。但只是想知道。
这是Rails 2.3.8和MySQL。
答案 0 :(得分:10)
我也得到了同样的错误。看起来这是reported back in 2009:
我之前在测试中看到过这种情况 - 通常由数据库具有与系统不同的时间分辨率引起。因此,即使两次打印相同,一个是真的(例如)15:45:32.012445362并且DB加载回15:45:32,这不比较相等。
建议的解决方案,对我有用:
在你的测试中,你可以在比较之前尝试强制to_a; to_a表示中不返回usec值: