2012-03-13 19 views
1

現在の時刻がhtmlに挿入されていることを確認しています(jav30でtime_agoを使用していました)。 Rspec要求テストでの競合状態

現在のUNIX時間(エポック)

は、このように、この場合には、与えられたhtml要素のデータのデータ属性でレンダリングされます。

<a href="/somewhere" data-last-points-awarded-at="1331606458">Something Happend</a> 

しかし、私のテストの実行:実行時

recipe = Factory(:recipe, name: "Apple Pie", user: @user) 

visit some_path 

time_in_layout = find('a[data-last-points-awarded-at]')['data-last-points-awarded-at'] 
current_time = Proc.new { Time.now }.call.to_i.to_s 

time_in_layout.should eql(current_time) 

を私のテストは失敗します...しかし、ほんのわずかです:

Failure/Error: time_in_layout.should eql(current_time) 

    expected: "1331606459" 
     got: "1331606458" 

    (compared using eql?) 

すべてが問題なく、テストはかなりです私は実際にそれが動作したいと思う方法は、procは秒後である時間を返します、どのように私はこれを修正することができますか?テストの初めに時間を固定する方法と同じように、私はそのようなことをすることもできますか?

答えて

2

TimeCopをチェックしてください。

+0

これはクールに見える!ただ一つのテストのための全体の宝石ですか?それは過労ですか?私の唯一の選択肢かもしれない。 –

+0

:これは:test環境でのみロードできますが、すべてのgemにロード時間が少し追加され、Timeクラスを混乱させると、注意しないと他のテストに予期しない結果が生じる可能性があります。 –

+0

より良い方法は、あなたが電話をかける前に時間を模擬することです。これは単体テストレベルでうまく動作しますが、単体レベルでテストすると、要求レベルで何か他のものをテストすることができます(時間が表示され、合理的な範囲内にあるように)。 –

関連する問題