はじめに
以下のafter_createのテストを書いていたところ、テストが通りませんでした。
class Hoge < ApplicationRecord
after_create :change_status
private
def change_status
if status != 'xxx'
#Fugaをhas_manyで関連づけている
fuga(status: false)
end
end
end
原因
hogeのstatusを更新した後のfugaのstatusをテストしたかったのですが、
Hogeのupdate時にバリデーションエラーが発生していました。
(正確にはバリデーションエラーが発生していたことに気が付かなかった)
hoge.update(status: xxx)
解決方法
updateだとバリデーションエラー時に例外をスローせず、falseを返すので、
update!にしたところ、見事に例外をスローしていましたのでエラーメッセージ通りの対応をして無事解決しました。
(status変わると、必須項目が増えるのでそれらを追加するだけでした)
hoge.update!(status: xxx)
おわりに
小一時間溶かしてしまったのでここで供養しておきます