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は秒後である時間を返します、どのように私はこれを修正することができますか?テストの初めに時間を固定する方法と同じように、私はそのようなことをすることもできますか?
これはクールに見える!ただ一つのテストのための全体の宝石ですか?それは過労ですか?私の唯一の選択肢かもしれない。 –
:これは:test環境でのみロードできますが、すべてのgemにロード時間が少し追加され、Timeクラスを混乱させると、注意しないと他のテストに予期しない結果が生じる可能性があります。 –
より良い方法は、あなたが電話をかける前に時間を模擬することです。これは単体テストレベルでうまく動作しますが、単体レベルでテストすると、要求レベルで何か他のものをテストすることができます(時間が表示され、合理的な範囲内にあるように)。 –