增加Rails测试时间精度

时间:2017-05-20 17:20:13

标签: ruby-on-rails postgresql testing rspec

随着时间的推移,我们注意到随着我们的计算机性能越来越高,我们最终得到了更多Rails规范,其中包含时间问题,其中时间戳似乎并不明显。例如:

event1 = create(:event)
event2 = create(:event)
expect(Event.order(:created_at).last).to eq event2

上述测试在历史上一直是完全可靠的,但最近由于我们的计算机功能更强大而显得更加不稳定。有时它是event1,有时它是event2。我对这里发生的事情的最好猜测是,它们最终一个接一个地创建得很快,时间戳并不明显。我想知道是否有办法在我们的测试中提高时间戳的精度来解决这个问题,或者我是否只需要在任何地方手动指定时间戳?例如,我们开始做的是:

event1 = create(:event, created_at: 1.minute.ago)
event2 = create(:event)
expect(Event.order(:created_at).last).to eq event2

我也想知道它是否与数据库时间戳精度有关,还是仅仅在Rails中?

1 个答案:

答案 0 :(得分:0)

我可以使用Timecop gem's scale tool添加来解决此问题。它可以缩放时间,因此在我的情况下,实时1秒相当于测试区域的10秒。我将以下内容添加到rails_helper

config.around do |example|
  Timecop.scale(10) do
    example.run
  end
end

之后,所有与时间相关的规格都在不断传递。

更新:这似乎不再适用。不知道为什么它之前对我有用,但现在我得到了类似的时间错误,尽管我的所有规格都有Timecop.scale