加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails单元测试中的DateTime问题

发布时间:2020-12-17 03:57:42 所属栏目:百科 来源:网络整理
导读:我正在为我的Rails应用程序进行单元测试,并遇到了以下问题. 我有一个带有夹具的事件模型,归结为: concert: name: Wallflowers start_at: %= DateTime.new(1999) % 在我的单元测试中,我有以下断言: assert_equal DateTime.new(1999),events(:concert).start
我正在为我的Rails应用程序进行单元测试,并遇到了以下问题.

我有一个带有夹具的事件模型,归结为:

concert:
  name:        Wallflowers
  start_at:    <%= DateTime.new(1999) %>

在我的单元测试中,我有以下断言:

assert_equal DateTime.new(1999),events(:concert).start_at

测试失败,并显示以下消息:

<Fri,01 Jan 1999 00:00:00 +0000> expected but was
<Thu,31 Dec 1998 19:00:00 UTC +00:00>.

我无法弄清楚为什么要调整它.不正确时间的偏移量是5小时,这是我的本地偏移量.

其他可能相关的信息:

>问题只发生在测试时 – 我在开发过程中没有任何问题
> environment.rb包含config.time_zone =’UTC’
>如果我使用Date.new而不是DateTime.new,测试工作,但我需要使用DateTime

我错过了什么?感谢帮助.

解决方法

ActiveRecord自动将所有插入的时间戳转换为UTC.这就解释了为什么您的音乐会时间调整到不同的时区.第一步是通过将environment.rb中的config.time_zone设置为您的时区来查看问题是否已解决.

如果这不能解决问题,请继续阅读:

经过一些测试后,我发现与使用控制器中的相同代码相比,在灯具中使用DateTime似乎存在一些差异.如果我在我的控制器中使用DateTime.new(1999),则插入的列是1999-01-01 00:00:00.如果我在我的夹具中使用相同的调用,插入的列是1999-01-01 10:30:00,这是我的时区.这与config.time_zone设置的无关.

在这两种情况下,更改时区都会正确更改从数据库中获取的ActiveRecord对象.

事实上,我不知道哪个是正确的表示.我知道当我将灯具更改为’1999-01-01 00:00’而不是使用DateTime.new(1999)时测试通过.如果第一段中的解决方案不适合您,请尝试将夹具更改为日期的字符串表示形式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读