Ruby on rails 提高钢轨测试时间和精度

Ruby on rails 提高钢轨测试时间和精度,ruby-on-rails,postgresql,testing,rspec,Ruby On Rails,Postgresql,Testing,Rspec,随着时间的推移,我们注意到,随着机器性能的提高,我们最终会得到更多的Rails规范,这些规范会出现时间戳不明显的计时问题。例如: event1 = create(:event) event2 = create(:event) expect(Event.order(:created_at).last).to eq event2 上述测试在历史上是完全可靠的,但最近由于我们的计算机功能更强大,显然变得不可靠。有时是event1,有时是event2。我对这里发生的事情的最好猜测是,它们一个接一个地被

随着时间的推移,我们注意到,随着机器性能的提高,我们最终会得到更多的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秒的实时时间相当于10秒的测试时间。我将以下内容添加到我的
rails\u助手中

config.around do |example|
  Timecop.scale(10) do
    example.run
  end
end
之后,所有与时间相关的规范都会一致通过

更新:这似乎不再有效。我以前不知道为什么会这样,但现在我遇到了类似的计时错误,尽管我的所有规格都有
Timecop.scale