为什么与时间相关的规范经常失败?

时间:2018-10-27 08:56:52

标签: rspec rspec-rails

在我的Rails 5应用程序中,我定期运行包含1000多个测试的测试套件。大多数时候,它们都通过了。但是,一项测试有时会不断失败:

describe 'DELETE #destroy' do

  context "with valid password" do

    it "sets delete_at" do
      delete :destroy, :params => {:password => @user.password}
      expect(@account.reload.delete_at).to be_within(2.seconds).of(Time.zone.now + DEACTIVATION_TIME)
    end

  end

end

错误消息总是相同的:

Failure/Error: expect(@account.reload.delete_at).to be_within(2.seconds).of(Time.zone.now + DEACTIVATION_TIME)
   expected 2018-11-06 09:42:29.000000000 +0100 to be within 2 of 2018-11-06 10:42:29 +0100

我认为该错误与Timezones有关,但我不知道如何解决。为什么它有时会通过而有时会失败?!

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

Time.zone.now + DEACTIVATION_TIME使您的测试变得脆弱。如果我了解您测试正确,那么您有兴趣检查delete_at记录上是否设置了正确的account值。如果是这种情况,为什么需要将DEACTIVATION_TIME添加到Time.zone.now?在您提供的错误消息中增加了整整一小时