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

Bri*_*ong 7 testing ruby-on-rails 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>.
Run Code Online (Sandbox Code Playgroud)

请注意,两者显示相同的时间和时区.我检查了它们是同一类类型(ActiveSupport :: TimeWithZone).那他们为什么不平等呢?

它是数据库中的标准DateTime字段,我认为它只存储到第二个右边?

我可以通过将它们转换为整数或使用assert_in_delta1分钟的范围来通过它.但只是想知道.

顺便说一下这是Rails 2.3.8和MySQL.

Cra*_*ker 10

我也得到了同样的错误.看起来这是在2009报道的:

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

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

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