【发布时间】: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