- ページを開く
- ActionCableのブロードキャストを実行する
- ブロードキャストの結果画面が変更されるのを確認する
というテストがあるときに、2がActionCableの該当チャンネルのsubscribeより前に実行されてしまいテストが失敗する、という事象があった。
なのでsubscribeを待つためのヘルパーメソッドを書いてみた。asyncアダプタ想定で、subscriber情報を持っているハッシュの個数が0より大きくなればsubscribe完了しているだろう、と判断した。
def wait_for_websocket_connection Timeout.timeout(Capybara.default_max_wait_time) do until ActionCable.server.pubsub.send(:subscriber_map).instance_variable_get(:@subscribers).count > 0 sleep 0.5 end end end
だいぶナイーブな実装なのでうまく動かないケースもありそうだけど、とりあえずこれで。