非同期コメント投稿機能の結合テストが中々通らなかった話
開発環境
Mac OS Catalina 10.15.7
ruby 2.6系
rails 6.0系
前提
非同期でコメント投稿機能実装済み
Commentモデルの単体テストは実行済み
FactoryBotやFakerはインストール済み
ことの発端
オリジナルアプリの結合テストを書いていたところ、「コメントを送信すると、Commentモデルのカウントが1上がることを確認する」というexampleの記述が引っ掛かりエラーになってしまった。
# コメントを送信すると、Commentモデルのカウントが1上がることを確認する
expect{
find('input[name="commit"]').click
}.to change {Comment.count}.by(1)
原因
エラー文を見る限りどうやら、Comment.countが増えていないようでした。
送信自体ができていないわけではなく、原因のexampleを抜いてテストコードを実行すると、下記のexampleは正常に通りました。
# 詳細ページ上に先ほどのコメント内容が含まれていることを確認する
expect(page).to have_content(@comment)
解決法
おそらく非同期でコメント投稿機能を実装したので、モデルのカウントが上がっていないのだろうと推測しました。
そのため、ページをリロードする記述を追加し、以下のようにテストコードを編集しました。
# コメントを送信すると、Commentモデルのカウントが1上がることを確認する
find('input[name="commit"]').click
expect{
visit current_path
}.to change {Comment.count}.by(1)
この結果無事テストコードは通りました。
調べましたが、Ajax関連のテスト方法はいろんな手法があるみたいですね。
この方法が正しいのかはわかりませんが、一つの手段として参考になれば幸いです。
Author And Source
この問題について(非同期コメント投稿機能の結合テストが中々通らなかった話), 我々は、より多くの情報をここで見つけました https://qiita.com/toto_public/items/aaea127b530256c4a7a6著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .