Frage

Ich mag Tests schreiben, ob die Datenbank synchron ist mit meiner models.py Datei anzeigen kann. Eigentlich habe ich sie schon geschrieben, nur um herauszufinden, dass django eine neue Datenbank erstellt jedes Mal die Tests ausgeführt werden auf der Grundlage der models.py Datei. Gibt es eine Möglichkeit, die models.py Test machen kann verwenden, um das bestehende Datenbankschema? Die eine, die in MySQL / PostgreSQL, und nicht die, die in /myapp/models.py ist?

Ich kümmere mich nicht um die Daten, die in der Datenbank ist, ich nur kümmern uns um es Schema dh ich möchte, dass meine Tests feststellen, ob eine Tabelle in der Datenbank weniger Felder als das Schema hat in meinem models.py Datei.

Ich bin die Unittest-Framework (eigentlich die django Erweiterung es), wenn diese keine Relevanz hat.

Dank

War es hilfreich?

Lösung

Was wir taten, war der Standard test_runner außer Kraft setzen, so dass es nicht um eine neue Datenbank zu testen gegen schaffen würde. Auf diese Weise läuft es den Test gegen was auch immer unsere aktuelle lokale Datenbank aussieht. Aber sehr vorsichtig sein, wenn Sie diese Methode verwenden, da alle Änderungen an Daten, die Sie in Ihren Tests machen werden dauerhaft sein. Ich stellte sicher, dass alle unsere Tests alle Änderungen wieder zurück in ihren ursprünglichen Zustand, und halten unsere ursprüngliche Version unserer Datenbank auf dem Server und gesichert.

So, dies zu tun müssen Sie die RUN_TEST Methode von django.test.simple zu einer Stelle in Ihrem Projekt kopieren - Ich habe mein in myproject / test / test_runner.py

Dann nehmen Sie die folgenden Änderungen an dieser Methode:

// 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)

Achten Sie darauf, alle notwendigen Importe an der Spitze zu tun und dann in Ihren Einstellungen, um die Einstellungsdatei festlegen:

TEST_RUNNER = 'myproject.test.test_runner.run_tests'

Wenn Sie nun ./manage.py Test ausgeführt wird Django die Tests gegen den aktuellen Zustand Ihrer Datenbank, anstatt die Schaffung eine neue Version läuft basierend auf dem aktuellen Modelldefinitionen.

Eine andere Sache, die Sie tun können Sie eine Kopie Ihrer Datenbank erstellen lokal und dann in Ihrem neuen RUN_TEST () -Methode wie folgt einen Scheck tun:

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) 

Auf diese Weise besteht keine Gefahr von Tests gegen Ihre Hauptdatenbank ausgeführt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top