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

2番目の質問では、別の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 に答える