前人未踏の領域へ WEB・インフラ・プログラミング全般編

フロントエンド、バックエンド、インフラ、言語など、アプリ開発、IOT以外の記録

RSpecで _before_last_saveのテストが上手く動作しない

課題

値が変更されていた場合にのみ実行されるようなテストを書いたが、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
/* Responsive: yes */