0

在 Rails 应用程序中,我有一个模型属性,用于设置用户执行操作时的日期时间。

测试此功能的最佳方法是什么,而不是太脆弱?

例如,我有

it "should set the uploaded time" do
  @model.uploaded_at.should == DateTime.now.new_offset(0)
end

我的测试在应该通过时失败了

expected: Thu, 24 May 2012 10:32:50 +0000
got: Thu, 24 May 2012 10:32:50 UTC +00:00 

所以我的问题是:

  1. 我应该如何定义DateTime.now.new_offset(0)以便预期 UTC 标记?

  2. 我可以看到由于时间的流逝,此测试可能会失败。例如:创建工厂,运行测试,1 秒后it "should set the uploaded time"运行,测试因 1 秒差异而失败。有没有更好的方法来测试这个?

感谢您提供任何可以帮助我学习这一点的提示。

4

2 回答 2

3

为此目的有timecop https://github.com/jtrupiano/timecop

于 2012-05-24T11:00:35.423 回答
1

对于您的第二个问题,如果您不想添加另一个 gem(timecop),您可以存根日期( )或基于更改DateTime.stub(:now).and_return :whatever的事实( )进行测试uploaded_at@model.uploaded_at.should_not == the_previous_uploaded_at_value

于 2012-05-24T11:28:03.887 回答