ボタンをクリックするなどして、画面が変わったことを待ってから、テストをしたい場合に、処理完了を待つ snippet がぐぐるとけっこうでてくる。
要するに jQuery.active に通信数が保存されているので、これが 0 になるまで待つというのが定石らしい。
ところが Rails5 だと脱 jQuery 化しているようで、これだと完了を検出することができない。
公式の issue でも言及されているようで現時点では解決されていないようである。
仕方ないのでテストが成功するまでループするやっつけコードを使うことにした。
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