概要
"expected #count to have changed by -1, but was changed by 0"のエラー文の解消話です。
前提
- 具体的なコードはほとんど書いていないです。
テストが落ちたコード
describe OrdersController do
describe 'delete #destroy' do
it "deletes the article" do
order = create(:order)
expect{
delete :destroy, id: order
}.to change(Order,:count).by(-1)
end
end
end
ブルーな気持ち
DELETEについてのテストを書いていたのですが、"expected #count to have changed by -1, but was changed by 0"のエラー文が登場して原因がわからず頭を抱えていました。
解決方法
DELETEの処理がレコードの物理削除ではなく論理削除を行なっていたことが原因でした
そのため、レコードの総数ではなく論理削除処理が行われていることをテストするようにテスト方法を見直して解決できました。
まとめや自己反省
-
"expected #count to have changed by -1, but was changed by 0"のエラーが発生したら
物理削除ではなく論理削除ではないか?と疑ってみてください。 -
destroyメソッドの中身を読み直すと物理削除ではなく論理削除を行なっていることが気づけただろうから、テスト対象のメソッドを見直してからテストを書くようにしよう。