Rails assert_equal并不总是与DateTimes一起使用

时间:2011-04-05 18:34:49

标签: ruby-on-rails testing minitest

使用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。

1 个答案:

答案 0 :(得分:10)

我也得到了同样的错误。看起来这是reported back in 2009

  

我之前在测试中看到过这种情况 - 通常由数据库具有与系统不同的时间分辨率引起。因此,即使两次打印相同,一个是真的(例如)15:45:32.012445362并且DB加载回15:45:32,这不比较相等。

建议的解决方案,对我有用:

  

在你的测试中,你可以在比较之前尝试强制to_a; to_a表示中不返回usec值: