2011-08-02 8 views
0

nilをされ期待し、受信した値との差分にもかかわらず、エラーがスローされるのはなぜ私が散発的に以下のRSpecのエラーを取得し、それが何であるかに関して、混乱しています:RSpecのは

Failure/Error: Question.all[index].created_at.should == sorted_publish_dates[index] 
     expected: Tue, 02 Aug 2011 21:11:11 UTC +00:00 
      got: Tue, 02 Aug 2011 21:11:11 UTC +00:00 (using ==) 
     Diff: 
    # ./spec/models/question_spec.rb:23:in `block (3 levels) in <top (required)>' 

期待し、受信した値が表示されます私はRSpecがそれが問題だと思う理由について混乱しています。

答えて

1

あなたがそれらの時間値が実際にあるかを確認したい場合、彼らはそれらを比較するためにRSpecのを求める前to_f経由浮くに変換します。

また、わかりやすい値の場合は、マイクロ秒精度を表示するtime.xmlschema(6)を呼び出します。

テスト用とアプリケーション用にこれらの値をどのように生成しているか再考する必要があります。あなたのアプリでは、2つの時間の値は、マイクロ秒まで同じであることが保証されていますか?もしそうなら、テストは同じように時間を生成しますか?

+0

これは、もう一方を設定するソースと同じでなければなりません。私は、それぞれの.to_s(.to_fではなく)の値を比較することによって問題を解決したと思います。彼らは少なくとも数時間で違いますので、仕事はちょうど良いです - ありがとう。 –

0

商品のto_sは同じです。それは、アイテムが同じであることを意味するものではありません。私は彼らが別のクラスのインスタンスであると確信しています。

+0

これらは間違いなく同じクラスであり、エラーは散発的です。ほとんどの場合、それは過ぎます。異なるクラスは一貫性のあるエラーを示します –

2

あなたはTime.nowに対してテストしています(おそらく)。 rspecは同じ時間文字列を表示していますが、出力にミリ秒は含まれません。実際にオブジェクトの作成と同じ時間テストされていることを確実に測定できるように、テストをセットアップするときにTime.nowをスタブする必要があります。

before do 
    Time.stub!(:now).and_return("2011-02-08 21:11:11") 
end 
+0

実際には、アイテムが読み取られた値に対して設定されている定義済みの値をチェックしているため、データベースに出入りする物事のいくつかの特質があると思います。 )。あなたの助けを借りて、実際の値の代わりに.to_sの値を比較して問題を解決したので、msを落としました。 –