【发布时间】:2015-05-22 20:31:55
【问题描述】:
我有检查 Time.now 和对象的 created_at 属性之间差异的计算的规范。我存根 Time.now,所以这个值是恒定的。此外,我将 Time.now 设置为 created_at,但在重新加载对象后,此值会发生变化。这怎么可能?如何在对象重新加载后冻结 created_at?
这是一个问题的例子:
time = Time.now
=> 2015-03-19 15:50:13 UTC
Time.stubs :now => time
=> #<Expectation:0x9938830 allowed any number of times...
user = User.last
=> #<User:0x000000097a6e40...
user.update_attribute :created_at, Time.now - 1.minute
=> true
user.created_at
=> Thu, 19 Mar 2015 15:49:13 UTC +00:00
Time.now - user.created_at
=> 60.0
Time.now - user.reload.created_at
=> 60.442063277
我使用 rails 4.2.0、ruby 2.2.0 和 rspec 2.14.1
【问题讨论】:
-
证明
Time.now没有变化,而created_at正在变化。你没有证明这一点,只是做了假设。在您的脚本中执行puts Time.now和user.reload.created_at。 -
不幸的是,这是一种常见的情况——它与存根时间无关——实际上是
created_at的值发生了变化。数据库不存储毫秒,因此重新加载后此信息会丢失。不幸的是,我还没有看到解决这个问题的好方法。 -
我都得到了 60.0——使用 rails 4.2.0、ruby 2.2.0 和 rspec 2.14.1,我得到了
Time.stubs的错误,所以你的输出有些可疑。
标签: ruby-on-rails ruby rspec rspec2