10

テストに関するDjangoのドキュメントによると、--keepdbフラグは将来の実行のためにテストデータベースを保持します。

https://docs.djangoproject.com/en/1.8/ref/django-admin/#django-admin-option---keepdb

明確にするために、テストによってデータベースに加えられた変更 (つまり: object.save()) は自動的にリセットされますか? それとも、これらの変更をテスト内から元に戻す必要がありますか?

4

1 に答える 1

17

Django の default を使用している場合TestCase、すべてのテストはトランザクションで実行され、テストが終了するとロールバックされます。データベースがトランザクションをサポートしている場合、何もクリーンアップする必要はありません。

Django のLiveServerTestCaseまたはを使用している場合TransactionTestCase、各テストの後にすべてのテーブルが切り捨てられ、テスト前にシリアル化された初期データがテスト データベースに再ロードされます。これにより、移行されたアプリのデータは保持されず、移行されていないアプリのみが保持されます。

この--keepdbオプションは、データベースに対して特別なことは何もしません。テスト データベースが破棄されるのを防ぐだけで、テストの開始時にデータベースが見つかった場合は、新しいデータベースを作成する代わりにそのデータベースが使用されます。したがって、テストが終了したときに何らかの形でデータベースに残っているデータは、初期データと見なされます。これは、なんらかのエラーまたはユーザーの割り込みにより、トランザクションのないテストでデータベースをクリーンアップできない場合に最も関連します。その場合、データベースを再作成することをお勧めします。

于 2015-07-08T09:42:12.047 に答える