如何为DateTime值编写非脆弱的rspec测试?

时间:2012-05-24 10:55:01

标签: ruby-on-rails

在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秒的差异,测试失败。有没有更好的测试方法 此

  3. 感谢您提供有助于我了解此问题的任何提示。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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