我们的rspec出现了奇怪的行为,就像在12点到5点之间的夜晚,我们的测试正在下降。 (我住在印度,GMT + 5.30)
在进一步检查时,这就是我所看到的
rails c
Loading development environment (Rails 4.1.8)
[1] pry(main)> Date.yesterday
=> Thu, 09 Apr 2015
[2] pry(main)> Date.today
=> Sat, 11 Apr 2015
[3] pry(main)> Date.tomorrow
=> Sat, 11 Apr 2015
[4] pry(main)>
使用Ruby 2.1和Rails 4.1.8
对我而言,似乎Date.yesterday和Date.tomorrow是基于Date.current计算的(并且没有时区,它被假定为UTC)。 Date.today的计算方式不同,当前的时区图片也是如此。
这是否意味着我不应该使用任何时间,没有明确时区的日期。这不是完全错的吗?
任何帮助将不胜感激
至少,我发现这是我们团队成员的有趣发现
答案 0 :(得分:1)
如上所述here,Date.today
使用系统的本地时间。
在单元测试中,您应该模拟时间,但是您应该在集成测试中标准化UTC。您可以使用Time.now.utc.to_date
来执行此操作。 ActiveSupport也可以帮助你。
答案 1 :(得分:1)
所以我玩了一点,显然不难找到......
现在,在我需要'Date'类后,我在irb而不是rails控制台上做了同样的事情。事情只有Date.today存在,而其他不是默认的,这意味着Rails必须包含它以满足我们的需求。
我读了一下他们如何扩展Date类,我以为我在github / rails上创建了一个问题,但后来我偶然发现了这个 - :https://github.com/rails/rails/issues/12414
总结一下,Date.today应该用Date.current替换,所以这给出了
[1] pry(main)> Date.today
=> Sat, 11 Apr 2015
[2] pry(main)> Date.current
=> Fri, 10 Apr 2015
只有Date.today不包含时区,Rails的其他功能是......不一致是出乎意料的,并不好。