【问题标题】:Set time zone on one rspec test在一个 rspec 测试中设置时区
【发布时间】:2014-11-04 17:56:10
【问题描述】:

我正在尝试以这种方式在一个 rspec 测试中设置时区:

zone = ActiveSupport::TimeZone.new('Hawaii')
Time.stub(:now) { Time.now.in_time_zone(zone) }

这给了我一个堆栈级别太深的错误,我在这里缺少什么?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec


    【解决方案1】:

    尝试这样做:

    zone = ActiveSupport::TimeZone.new('Hawaii')
    Time.stub(:now){ Time.new.in_time_zone(zone) }
    

    我不确定,但似乎存根 now 然后在块中调用 Time.now 会导致堆栈级别太深错误。

    【讨论】:

    • 甜,就是这样。我试图更改 Delorean.time_travel_to(1.days.ago) 上的时区。我想通过存根 Time.now 我可以更改时区,因为 time_travel_to 使用 Time.now。在您的修复程序运行后,这不起作用。你不会突然想到一个主意吧?
    • 对不起,我从来没有在我的规范中使用 Delorean 来模拟时间。顺便说一句,Delorean 看起来已经过时了,你有没有考虑用Timecop 代替?
    • 是的,我正在处理一个旧项目。我试图避免在一次测试中使用不同的 gem,但我可能不得不尝试一下。我有一项测试在下午 4:00 后失败。当测试在 Semaphore 上运行时,因为服务器使用 UTC。这真的很烦人,我想解决它。
    • 我可以推荐这些 railscasts。 1:railscasts.com/episodes/106-time-zones-revised 2:railscasts.com/episodes/276-testing-time-web-requests 但我想你可能已经知道它们了。
    【解决方案2】:

    如果您想在每次测试中遵循特定时间,您可以尝试这样的方法

    Time.stub(:now).and_return(Time.mktime(2017,01,23,11,00,00).gmtime)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-02-10
      • 2018-03-10
      • 1970-01-01
      • 2019-12-28
      • 1970-01-01
      相关资源
      最近更新 更多