ruby 升级依赖于gem日期为3.3.3的gem后,日期预期失败

6uxekuva  于 2023-08-04  发布在  Ruby
关注(0)|答案(1)|浏览(157)

在我升级一个依赖Date gem 3.3.3的gem之前,这个期望已经过去了:

# order.purchased_at = Sun, 26 Jan 0020 00:00:00 UTC +00:00
# order.purchased_at.class == ActiveSupport::TimeWithZone
expect(order.purchased_at).to eq 'Sun, 26 Jan 0020 00:00:00 UTC +00:00'.to_datetime

字符串
由于某种原因,添加Date gem 3.3.3使上述期望失败,有什么想法吗?

mqxuamgl

mqxuamgl1#

您的测试实际上反映了应用程序代码中需要测试的内容吗?也就是说,你真的用to_datetime转换日期时间,并需要它们与使用==ActiveSupport::TimeWithZone相比是真的吗?
我这么问是因为我并不感到惊讶:

main> dt = 'Sun, 26 Jan 0020 00:00:00 UTC +00:00'.to_datetime
Fri, 26 Jan 0020 00:00:00 +0000
main> dt.in_time_zone('UTC') == dt
false

字符串
正如您所看到的,DateTime不包括实际的时区,只包括偏移量,因此与包含时区的对象的任何相等都是一种延伸。Which is one of the reasons DateTime was deprecated as of Ruby 3.0
如文档所述,使用Time代替:

main> tt = Time.parse 'Sun, 26 Jan 0020 00:00:00 UTC +00:00'
0020-01-26 00:00:00 UTC
main> tt == tt.in_time_zone("UTC")
true


或者......如果你的测试真的关心将要显示的内容,那么也许你应该比较字符串化的版本:

expect(order.purchased_at.to_s).to eq "0020-01-26 00:00:00 UTC"

相关问题