2009-05-28 10 views
0

私のモデルクラスにはbefore_saveというフィルタがあり、データの整合性を保証するために日付フィールドを将来の日付に設定します。Railsのテスト目的のbefore_saveフィルタのオーバーライド

これはユニットテストの場合を除いては本当にうまく動作します。この日付フィールドを過去の日付に設定するテストシナリオを設定したいと思います。 before_saveフィルタが呼び出され、日付が将来の日付に更新されるため、ActiveRecordを使用してこれを行うことはできません。 ActiveRecord::Base::connection.updateを使用して生のSQLを実行するには、これを行う最善の方法はありますか?

答えて

0

これはちょっとしたハックと見なすことができますが、ユニットテストでモデルクラスを再オープンして、before_saveフィルタの実装を上書きすることができます。

0

これを許可しないと、なぜそれが起こったかをテストする必要がありますか?

過去の日付をそのモデルに保存することを許可していない場合は、それをテストしないといけません。

行われるべきであると思われる唯一のテストは、あなたが過去に日付を保存しようとすると、それが正しく

+0

を読むために私が書いているテストは、このモデルのために、しかしモデルを使用してバックグラウンドワーカークラスのためではありません。現地時間がモデル上のこの日付よりも大きい場合(このアプリでは7日後に発生します)、バックグラウンドワーカーはモデルでジョブを実行します。私はバックグラウンドワーカーをテストしているので、モデル日付が過ぎたシナリオを作成する必要があります。 – Olly