RSpecで単体テストを行うために、ActiveRecordスタンドアロン(Railsアプリケーションの一部ではない)を使用しています。データベースで、監査テーブルに行を挿入するトリガーをテストしています。
クラスは次のとおりです。
フォルダには多くのファイルがあります
フォルダには多くのFileAuditがあります
イベントのシーケンスは次のようになります。
- フォルダーを作る
- テスト1を開始
- ファイルの作成
- ファイルにいくつかのことをする
- Folder.file_auditsを取得します
- 関連するFileAuditレコードを確認する
- ファイルを破棄する
- FileAuditsを破棄する
- テスト1を終了します
- テスト2を開始
- ファイルの作成
- ファイルに他のことをする
- Folder.file_auditsを取得します
- 関連するFileAuditレコードを確認する
- ファイルを破棄する
- FileAuditsを破棄する
- テスト2を終了
- フォルダを破棄する
テスト1のFileAuditsは破棄されていますが、テスト2のFileAuditsは破棄されていません。ActiveRecordは、2番目のテストの最後に削除する新しいテーブルは何もないと考えているようです。
Folder.file_audits(true)を実行してキャッシュを更新できますが、あらゆる種類のキャッシュを無効にして、ActiveRecordに、最善と思われることを実行するのではなく、指示したことだけを実行させたいと思います。
また、ファイルのフラグを同じ値に設定し、トリガーが監査レコードを作成しなかったことを確認する必要があります。フラグを別の値に設定すると、ログに更新ステートメントが表示されますが、同じ値に設定して保存すると、ログに更新がありません。
Webサイトではキャッシュなどは問題ないと思いますが、そうではありません。データベースから常にすべてのレコードを取得し、何があっても常に更新および削除するために必要です。どうすればそれができますか?
ActiveRecord3.1.3を使用しています。
ありがとう