0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RSpecテストでActionCableをテストしたい

Posted at

前提

Rspecのセットアップなどは説明しません。
この記事などを参考にしてセットアップしてください。
https://qiita.com/tatsurou313/items/c923338d2e3c07dfd9ee

1. Capybaraのサーバーをpumaに設定する。

調べてみたところCapybaraのデフォルトのサーバはRailsアプリを別スレッドで動かしているだけのようで、ActionCableを利用するにはpumaを使う必要があります。
そのため、rails_heplerなどにpumaを使用するように記載する必要がありました。

rails_htpler.rb
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テーブルのカウントが増えませんでした。

messages_spec.rb
    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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?