【rails6】結合テストコードエラー expected ◯◯◯◯, but was not given a block の解決


みなさんこんばんは!
今日も結合テストコードのエラー解決について記載していきます

本日対面したエラー

ターミナル
Failure/Error: expect(find_link('削除する',  href: article_path(@article1)).click).to change{Article.count}.by(-1)
       expected ◯◯☆☆◯◯, but was not given a block

・・・「◯◯☆☆◯◯がブロックで渡されてないよ!」という日本語訳となります

では、原因のテストコード記述を確認してみましょう!

article_spec.rb
# 投稿を削除するとレコードの数が1減ることを確認する
expect(find_link('削除する',  href: article_path(@article1)).click).to change{Article.count}.by(-1)

きっと皆様であればどこが間違っているのか、すぐにわかりますよね…

間違っているのは、 expect( ) です、ここは expect{ } で結んであげないとダメなのです

changeマッチャでモデルのカウントをする場合のみ、expect()ではなくexpect{}を使いましょう
と教わっていました…この箇所を忘れてしまったということですね…反省です…

では、直していきましょう

article_spec.rb
# 投稿を削除するとレコードの数が1減ることを確認する
expect{find_link('削除する',  href: article_path(@article1)).click}.to change{Article.count}.by(-1)

ターミナルで実行します

Finished in 12.24 seconds (files took 1.3 seconds to load)
3 examples, 0 failures

うん、当然ですが無事にテスト終了しました!

続きを書いていくことにします