課題
値が変更されていた場合にのみ実行されるようなテストを書いたが、FactoryBotでcreateしたオブジェクトに _before_last_saveにFactoryBotでセットしていない値がセットされていて、調べるとDBのデフォルト値だった。
原因
FactoryBotでcreateしたオブジェクト(Railsで)は before_last_saveにmigrateファイルで定義したDBのデフォルト値を持つらしい。 そのため、変更が発生していなくても before_last_saveに値が入っているため、_before_last_saveに値がセットされているかどうか を条件としたテストで期待しない動作をすることがある。
対応
デフォルト値をnil にするか、リロードして古い値をクリアすることでテストを通過するようになった。微妙だが仕方ないかな。
xxx = FactoryBot(:hoge) xxx.reload