如何在最小测试用例中将ActiveRecord作为TimeWithZone返回时间戳?

时间:2014-02-20 13:03:02

标签: ruby-on-rails ruby activerecord ruby-on-rails-4 activesupport

我正在尝试为ActiveRecord 4.0提供最小的测试用例。我所拥有的是this gist,但是这条消息失败了:

  1) Failure:
BugTest#test_association_stuff [millisecond_resolution.rb:28]:
Expected: "ActiveSupport::TimeWithZone"
  Actual: "Time"

在完整的Rails应用中,这确实会返回ActiveSupport::TimeWithZone。我缺少的是AS和AR之间的链接,以便后者将时间戳返回为TimeWithZone。我已经添加了

ActiveRecord::Base.default_timezone = :local
ActiveRecord::Base.time_zone_aware_attributes = true

无济于事。我也知道lazy_load_hooks in AS,但请注意它们是否适用。

我在这里缺少什么?我走错了路吗?

2 个答案:

答案 0 :(得分:1)

好的伙伴,

我的计算机上只有rails 4.0.0,但是快速的说法让我想到了这个:

# activesupport-4.0.0/lib/active_support/time_with_zone.rb:39

# Report class name as 'Time' to thwart type checking.
def self.name
  'Time'
end

希望能让你更接近解决方案。

答案 1 :(得分:1)

您的测试中未设置时区。你必须设置时区。

Time.zone = 'Berlin'

有关详细信息,请参阅http://api.rubyonrails.org/classes/ActiveSupport/TimeWithZone.html