2012-05-24 50 views
0

在Rails應用程序中,我有一個模型屬性,可在用戶執行操作時設置日期時間。如何爲DateTime值編寫非脆弱rspec測試?

什麼是測試此功能的最佳方式,而不是太脆弱?

例如,我有

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秒的差異。有沒有更好的方法來測試 這個?

感謝您的任何提示,這將有助於我學習這一點。

回答

2

關於第二個問題時空特警,如果你不希望添加其他寶石(時空特警),您可以存根日期(DateTime.stub(:now).and_return :whatever)或基礎測試的事實那uploaded_at更改(@model.uploaded_at.should_not == the_previous_uploaded_at_value

+0

謝謝。這很有用。我將在這種情況下使用時間表,因爲我有其他基於時間的事情要測試。但是你的答案會很有用。恥辱我不能標出兩個答案! –