いけむランド

はてダからやってきました

Wait for ajax on Rails5 (without jQuery)

ボタンをクリックするなどして、画面が変わったことを待ってから、テストをしたい場合に、処理完了を待つ snippet がぐぐるとけっこうでてくる。

robots.thoughtbot.com

要するに jQuery.active に通信数が保存されているので、これが 0 になるまで待つというのが定石らしい。

stackoverflow.com

ところが Rails5 だと脱 jQuery 化しているようで、これだと完了を検出することができない。

公式の issue でも言及されているようで現時点では解決されていないようである。

github.com

仕方ないのでテストが成功するまでループするやっつけコードを使うことにした。

def wait_for
  Timeout.timeout(Capybara.default_max_wait_time) do
    loop do
      break if yield
    end
  end
end

wait_for do
  actual == expected # RSpec の expect(...).to で書きたい...。
end