テスト対象の新しいデータベースが作成されないように、デフォルトの test_runner をオーバーライドしました。このようにして、現在のローカル データベースがどのようなものであるかに対してテストを実行します。ただし、テストで行ったデータへの変更は永続的なものになるため、この方法を使用する場合は十分に注意してください。すべてのテストで変更が元の状態に復元され、元のバージョンのデータベースがサーバーに保持され、バックアップされていることを確認しました。
これを行うには、run_test メソッドを django.test.simple からプロジェクト内の場所にコピーする必要があります。私は myproject/test/test_runner.py に配置しました。
次に、そのメソッドに次の変更を加えます。
// change
old_name = settings.DATABASE_NAME
from django.db import connection
connection.creation.create_test_db(verbosity, autoclobber=not interactive)
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
connection.creation.destroy_test_db(old_name, verbosity)
// to:
result = unittest.TextTestRunner(verbosity=verbosity).run(suite)
上部で必要なすべてのインポートを行ってから、設定ファイルで設定を行ってください。
TEST_RUNNER = 'myproject.test.test_runner.run_tests'
./manage.py test を実行すると、Django は現在のモデル定義に基づいて新しいバージョンを作成するのではなく、データベースの現在の状態に対してテストを実行します。
他にできることは、データベースのコピーをローカルに作成し、新しい run_test() メソッドで次のようにチェックすることです。
if settings.DATABASE_NAME != 'my_test_db':
sys.exit("You cannot run tests using the %s database. Please switch DATABASE_NAME to my_test_db in settings.py" % settings.DATABASE_NAME)
そうすれば、メイン データベースに対してテストを実行する危険はありません。