【问题标题】:Increase Rails testing time precision提高 Rails 测试时间精度
【发布时间】:2017-10-20 16:35:03
【问题描述】:

随着时间的推移,我们注意到随着机器性能的提高,我们最终会遇到更多带有时间问题的 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 领域?

【问题讨论】:

    标签: ruby-on-rails postgresql testing rspec


    【解决方案1】:

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

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

    在那之后,所有与时间相关的规范都通过了。

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

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 2021-12-09
      • 1970-01-01
      • 2020-06-01
      • 2017-02-01
      • 2020-06-04
      • 2020-12-22
      • 2010-12-21
      • 1970-01-01
      相关资源
      最近更新 更多