rspecのAjax対応で、capybara-webkit-の反応を待たせる方法
rspecでAjax対応をテストしているときに、capybara-webkit
を使用している場合に、クリックした反応を待たずにそのまま次のテストにいってしまい、テストが失敗してしまうことがあります。
それを防ぐための方法になります。
test_helperのdefault値に反応を待たせる時間を記入する
test_helper
Capybara.default_wait_time = x(ここは任意の数字)
matcherの後に、waitを書いて待たせる
find have_selector(任意の記述・・・, wait: x)
helperにmethodを作成する
module WaitForAjax def wait_for_ajax Timeout.timeout(Capybara.default_max_wait_time) do loop until finished_all_ajax_requests? end end def finished_all_ajax_requests? page.evaluate_script('jQuery.active').zero? end end RSpec.configure do |config| config.include WaitForAjax, type: :feature end
他にもやり方があるかもしれませんが、こういう方法があります。
こういうやり方もありますよってことがありましたら、教えていただければ幸いです。