0

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を使用しています。

ありがとう

4

2 に答える 2

0

これがあなたに当てはまるかどうかはわかりませんが、過去にmodel.saveの代わりに行うことに問題がありましたmodel.save!。保存時に検証エラーが発生することがありますが、強打がなければ検証エラーによって実際の例外が発生することはないため、保存が成功しなかったことはわかりません。

于 2013-02-01T18:55:27.567 に答える