Co zrobiliśmy było zastąpić domyślny test_runner tak, że nie byłoby utworzyć nową bazę danych, aby przetestować przeciwko. W ten sposób uruchamia test, niezależnie od tego, jak wygląda nasza obecna lokalna baza danych. Zachowaj jednak ostrożność, jeśli używasz tej metody, ponieważ wszelkie zmiany danych, które wprowadzisz w testach, będą trwałe. Upewniłem się, że wszystkie nasze testy przywracają wszelkie zmiany do pierwotnego stanu i zachowują naszą pierwotną wersję naszej bazy danych na serwerze i mają kopię zapasową.
Tak, aby to zrobić trzeba skopiować RUN_TEST metodę z django.test.simple do lokalizacji w projekcie - kładę kopalnię w myproject/test/test_runner.py
Następnie należy dokonać następujących zmian że metoda:
// 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)
Upewnij się, aby zrobić wszystkie niezbędne importu na górze, a następnie w ustawieniach file wybrać ustawienie:
TEST_RUNNER = 'myproject.test.test_runner.run_tests'
teraz po uruchomieniu. Test /manage.py Django uruchomi testy w oparciu o bieżący stan bazy danych, zamiast tworzyć nową wersję na podstawie aktualnych definicji modeli. Metoda
Inną rzeczą, jaką możesz zrobić, to utworzyć kopię bazy danych lokalnie, a następnie wykonaj test w nowej RUN_TEST() tak:
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)
Dzięki temu nie ma niebezpieczeństwa prowadzenia testów przeciw główna baza danych.