Ich benutze Django 1.7.7 mit Python 2.7.6 und Postgres als Datenbank und ich hatte ein Problem mit einem TransactionTestCase
. In meinen Migrationen hatte ich zwei Datamigrationen und ich wollte, dass sie während der Tests verfügbar sind, so fügte ich serialized_rollback = True
zu meinem Testfall hinzu (https://docs.djangoproject.com/en/1.7/topics/testing/overview/#test-case-serialized-rollback).Django TransactionTestCase mit Rollback-Emulation
Der erste Test der Testfälle war ok, aber django beschwerte sich mit einem IntegrityError
dann:
IntegrityError: duplicate key value violates unique constraint "django_content_type_app_label_6032a1f08b99c274_uniq"
DETAIL: Key (app_label, model)=(admin, logentry) already exists.
ich es geschafft, die Tests zu laufen und diesen Fehler zu vermeiden, indem Sie die folgenden auf meine Einstellungen hinzugefügt (https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-TEST_NON_SERIALIZED_APPS):
TEST_NON_SERIALIZED_APPS = ['django.contrib.contenttypes',
'django.contrib.auth']
Aber ich würde gerne wissen, warum ist das nötig? Ist das ein Fehler im Rollback oder ist das ein Problem für mich?
Sie mir nur geholfen, um ein wirklich großes Problem mit meinem TransactionTestCase Test zu erhalten. Ich habe noch nie von TEST_NON_SERIALIZED_APPS gehört. VIELEN DANK. Ich denke, das liegt daran, dass TransactionTestCase fehlerhaft ist. Mein Code hat mit 1.7.2 funktioniert, er hat am 1.7.8 ohne TEST_NON_SERIALIZED_APPS angehalten. Ich bin (langsam) auf py.test umgestiegen, irgendwie glaube ich, dass pytest-django-Einbauten mir dabei helfen werden. Schließlich. Meine Antwort für deine Frage? Ich denke, du hast alles richtig gemacht und diese ganze Gymnastik ist mit Django 1.7 ATM erforderlich. – dotz
Ich stimme zu, das ist eine Frage und Antwort alles in einem. Danke vielmals! Ich bin mir nicht sicher, warum Django diese Apps nicht standardmäßig serialisiert, weil es in meinem Fall nicht funktionierte, wenn TEST_NON_SERIALIZED_APPS nicht wie vorgeschlagen gesetzt wurde. –