0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RailsにおけるRSpecテストコードで生成されたデータがデータベースに保存されない仕組み

Posted at

RailsでRSpecなどのテストコードを実行すると、テストコード内で生成されたデータは通常、データベースに保存されません。これは、テストコードと本番環境を分離し、テストデータが本番データに混入することを防ぐためです。

仕組み

RSpecなどのテストフレームワークは、テストコードを実行する前に、以下の2つの重要な処理を行います。

1. トランザクションの開始: テストコードの実行前に、データベースへのトランザクションを開始します。
2. トランザクションのロールバック: テストコードの実行後に、トランザクションをロールバックします。

トランザクションのロールバックにより、テストコード内で生成されたすべてのデータ変更はデータベースにコミットされず、本番環境に影響を与えることはありません。

例外

一部のテストシナリオでは、テストデータをデータベースに保存する必要がある場合があります。そのような場合は、以下の方法で実現できます。

save! メソッドを使用する: モデルオブジェクトを保存する際に save! メソッドを使用すると、トランザクションのロールバック前にコミットされます。

DatabaseCleaner gemを使用する: DatabaseCleaner gemは、テストコード実行前にデータベースの状態をスナップショットし、テスト終了後に元の状態に戻す機能を提供します。

テストデータと本番データの分離

テストデータと本番データを分離することは、テストの信頼性を高め、本番環境への影響を防ぐために重要です。RSpecなどのテストフレームワークが提供するトランザクション機能を活用することで、効率的にテストデータと本番データを分離することができます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?