【问题标题】:Rails 4 Rspec TimeZone issueRails 4 Rspec时区问题
【发布时间】:2014-05-05 09:28:37
【问题描述】:

我遇到了测试失败的问题。

在我的 application.rb 中,我有以下内容:

config.time_zone = 'Pacific Time (US & Canada)'
config.active_record.default_timezone = :local

在我的一个模型中,我有一个 check_in 列。我将其设置为以下内容:

Time.now + 30.days

在我的测试中,我设置了如下变量:

thirty_days = Time.now + 30.days

然后我将 check_in 与三十天变量进行比较。

我遇到的问题是 db 中的 check_in 列总是提前一天。

我不知道如何让这些日子为我的考试排好队。

例如,如果我在测试中添加 puts:

Time.now + 30.days 将输出:2014-06-03 14:29:51 -0700 check_in 将输出:2014-06-04 14:29:51 -0700

请指教。

【问题讨论】:

  • 作为旁注,您可以使用30.days.from_now。除此之外,没有多大意义。您是否检查了写入数据库的内容?无论如何它是什么数据库?您查看数据库中的原始数据了吗?
  • 感谢 30.days.from_now。那更干净。我仍然有问题。我使用的数据库是mysql。数据库中的实际记录是:2014-06-05 00:54:06 当我将它打印到终端时,它是星期三,2014 年 6 月 4 日 17:54:06 PDT -07:00。当我在测试中打印 30.days.from_now 时,它是星期二,2014 年 6 月 3 日 17:55:58 PDT -07:00,我得到了三个不同的日期。
  • 这是我写的一篇关于使用 rails 处理时区的博文 - jessehouse.com/blog/2013/11/15/… - 您可能会觉得它有帮助?你可能想在你的 rspec 测试中使用类似 Timecop 的东西 - github.com/travisjeffery/timecop
  • 由于某种原因,问题是在调用 .update_column 后调用 ActiveRecord .update 方法我不明白。

标签: ruby-on-rails rspec


【解决方案1】:

这里只是一个疯狂的猜测,但也许您的 SQL 服务器也在转换时区(rails 已经这样做了,并且以 UTC 格式存储日期)。

检查您的 sql 服务器时区设置(对于 mysql,它是 SELECT @@system_time_zone)并查看将其更改为 UTC,然后再次运行您的测试,看看它是否有效

【讨论】:

  • 谢谢。我将我的 mysql 服务器设置为使用“+00:00”。我仍然有同样的问题。数据库中存储的内容减少了一天。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-27
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多