私はRails 3アプリケーションを持っていますが、そこでテストケースを書こうとしていますか? テスト ケースが読み込まれると、データベース内のフィクスチャに対応するオブジェクトが作成されていることがわかります。ただし、テスト ケース内のオブジェクトを変更したり、別のオブジェクトを作成したりしても、データベースに反映されません。さらに、正しく発生している新しく作成されたオブジェクトが見つかった場合。
ここで何が起きてるの?また、変更をデータベースに反映するにはどうすればよいですか?
私はRails 3アプリケーションを持っていますが、そこでテストケースを書こうとしていますか? テスト ケースが読み込まれると、データベース内のフィクスチャに対応するオブジェクトが作成されていることがわかります。ただし、テスト ケース内のオブジェクトを変更したり、別のオブジェクトを作成したりしても、データベースに反映されません。さらに、正しく発生している新しく作成されたオブジェクトが見つかった場合。
ここで何が起きてるの?また、変更をデータベースに反映するにはどうすればよいですか?
test_helper.rb で、use_transactional_fixtures オプションがおそらく に設定されていtrue
ます。これは、すべてのテストがデータベース トランザクションにラップされることを意味します。トランザクション (MySQL InnoDB 内) は、「COMMIT」で永続化する必要があります。Rails テスト フレームワークはそれを行わないため、データベースは各テスト後に新しい状態になります。その結果、変更はロールバックされます。
トランザクション内の変更は、それを開始したデータベース接続によってのみ見ることができ、外部 (あなたの場合はrails db
コマンド) からは表示されません。
これが役立つことを願っています。