То, что мы делали, было переопределить test_runner по умолчанию, так что он не будет создавать новую базу данных, чтобы проверить против. Таким образом, он запускает тест против любой текущей локальной базы данных. Но будьте очень осторожны, если вы используете этот метод, потому что любые изменения в данных, которые вы делаете в ваших тестах, будут постоянными. Я убедился, что все наши тесты возвращают все изменения в исходное состояние и сохраняют нашу первоначальную версию нашей базы данных на сервере и резервируются.
Так для этого вам нужно скопировать run_test метод из django.test.simple к месту в вашем проекте - я поставил мину в MyProject/тест/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. 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)
Таким образом, нет никакой опасности выполнения тестов на ваш основная база данных.