現在、私のRailsアプリケーションの時間追跡機能のテストを書いています。タイマーの「再生」ボタンをクリックして、数秒待ってから、一時停止をクリックしてフォームを送信する(新しいタイムスタンプオブジェクトを作成する)ことをシミュレートする方法を理解できません。Rails:カピバラの統合テストでストップウォッチをテストするにはどうしたらいいですか?
test "track time with stopwatch" do
visit new_project_timestamp_path(@project)
find('#play_button').click
sleep 4.0
find('#pause_button').click
click_button "submit_new_timestamp"
visit project_path(@project)
assert page.has_content? "4 seconds"
end
^これは、私はそれが何をしたいの要旨であるが、それは完全にスレッドを一時停止するので、私はストップウォッチを行いながら、「周りを待つ」の種類にテストをしたいのに対し、睡眠は明らかに、動作しません。数秒間その事をする。実際に時間が追跡されないため、上記のテストは失敗します。一時停止はタイマーの目の中で再生直後にクリックされるので、実際の時刻が記録されずにフォームが提出されますが、もちろん検証エラーがスローされます。
実際にスレッドを一時停止せずに数秒待ってシミュレーションする方法はありますか?
エラーメッセージフォーム(およびテストログ)は、フォームのseconds_elapsedフィールドが入力されないことを示します。 これは、jQueryを使用してサブミット時にストップウォッチによって追跡された秒数で埋められます。それが適切に実行されていないか、まったく実行されていないと思われます(これは開発と運用では問題ありません)。 私はドライバを切り替えようとします、多分それはそれを解決するでしょう。もしそうでなければ、おそらくテスト環境にしか現れていないjQueryコードのどこかにバグがあります。 –
@BenLawtonどのようにフォームフィールド、JSクリックハンドラを埋めるのですか?もしそうなら、JS対応ドライバを使用していますか?(デフォルトのcapybaraラックテストドライバはJSを実行しません) –
もともとデフォルトを使っていましたが、 'Capybara.javascript_driver =:selenium'を設定してみました。 –