前提
Rspecのセットアップなどは説明しません。
この記事などを参考にしてセットアップしてください。
https://qiita.com/tatsurou313/items/c923338d2e3c07dfd9ee
1. Capybaraのサーバーをpumaに設定する。
調べてみたところCapybaraのデフォルトのサーバはRailsアプリを別スレッドで動かしているだけのようで、ActionCableを利用するにはpumaを使う必要があります。
そのため、rails_heplerなどにpumaを使用するように記載する必要がありました。
Capybara.server = :puma
これでOKと思いましたが、なぜかまだテストがエラーになります。
expect {
fill_in "message_content", with: "宜しくお願いします。"
click_button "送信"
}.to change(Message, :count).by(1)
expected `Message.count` to have changed by 1, but was changed by 0
2. sleepで待ち時間を設定する。
少し考えれば分かる簡単なことですがおそらく、非同期通信をしているのですぐにはMessageテーブルのカウントが増えませんでした。
expect {
fill_in "message_content", with: "宜しくお願いします。"
click_button "送信"
sleep 5
}.to change(Message, :count).by(1)
そこでこのようにsleepを入れてあげれば、無事テストはパスするようになりました。
Capybaraをpumaに変更するという記事はいくつかありましたがsleepも設定するという記事は見当たらなかったので投稿しました。
参考記事
https://qiita.com/tatsurou313/items/c923338d2e3c07dfd9ee
https://blog.willnet.in/entry/2017/06/05/092956