読者です 読者をやめる 読者になる 読者になる

rspecのAjax対応で、capybara-webkit-の反応を待たせる方法

rspecAjax対応をテストしているときに、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

他にもやり方があるかもしれませんが、こういう方法があります。

こういうやり方もありますよってことがありましたら、教えていただければ幸いです。