RSpec 测试时间对象

RSpec testing Time objects

我的时间规格不合格。

我知道时间是从纪元算起的秒数,但如果对象表示足够接近,我希望这个规范能够通过。

例如:

expect( @model.end_date ).to eq end_date

expected: Wed, 08 Feb 2017 20:13:30 UTC +00:00
     got: Wed, 08 Feb 2017 20:13:30 UTC +00:00

有没有人对测试时间有什么建议,这样轻微的偏移就不会导致测试失败?

你可以使用RSpec的built-inbe_within matcher,它也可以用于浮点数和其他容易出现细微差异的数据类型:

expect(@model.end_date).to be_within(1.second).of(end_date)

我会离开 eq 方法,但会使用 Timecop - https://www.rubydoc.info/gems/liangzan-timecop/Timecop.freeze 冻结规范的时间。使用 be_within 并不能保证规范会通过。