1
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.

非同期コメント投稿機能の結合テストが中々通らなかった話

Last updated at Posted at 2021-02-02

開発環境

Mac OS Catalina 10.15.7
ruby 2.6系
rails 6.0系

前提

非同期でコメント投稿機能実装済み
Commentモデルの単体テストは実行済み
FactoryBotやFakerはインストール済み

ことの発端

オリジナルアプリの結合テストを書いていたところ、「コメントを送信すると、Commentモデルのカウントが1上がることを確認する」というexampleの記述が引っ掛かりエラーになってしまった。

comments_spec.rb
# コメントを送信すると、Commentモデルのカウントが1上がることを確認する
    expect{
      find('input[name="commit"]').click
    }.to change {Comment.count}.by(1)

エラー文スクリーンショット 2021-02-01 17.40.10.png

原因

エラー文を見る限りどうやら、Comment.countが増えていないようでした。

送信自体ができていないわけではなく、原因のexampleを抜いてテストコードを実行すると、下記のexampleは正常に通りました。

comments_spec.rb
# 詳細ページ上に先ほどのコメント内容が含まれていることを確認する
    expect(page).to have_content(@comment)

解決法

おそらく非同期でコメント投稿機能を実装したので、モデルのカウントが上がっていないのだろうと推測しました。
そのため、ページをリロードする記述を追加し、以下のようにテストコードを編集しました。

comments_spec.rb
  # コメントを送信すると、Commentモデルのカウントが1上がることを確認する
    find('input[name="commit"]').click
    expect{
      visit current_path
    }.to change {Comment.count}.by(1)

この結果無事テストコードは通りました。

調べましたが、Ajax関連のテスト方法はいろんな手法があるみたいですね。
この方法が正しいのかはわかりませんが、一つの手段として参考になれば幸いです。

1
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
1
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?