2014-12-16 8 views
7

Ich möchte eine Vorrichtung für meine Selen-Tests laden. Die Verwendung von Fixtures war in meinen ersten Tests erfolgreich, daher weiß ich, dass ich in der Lage bin, die Fixtures in meinen Testaufbau zu laden und sie in meinen Tests zu verwenden. Ich habe mehrere Ansätze versucht. Zuerst generierte ich Fixtures, die spezifisch für die Modelle waren, die ich mit dumpdata getestet habe. Ein Beispiel ist unten:Integritätsfehler beim Laden von Scheinwerfern für Selen-Test in Django

python manage.py dumpdata protocols.Step --indent=2 > functional_tests/fixtures/step.json 

Wenn sie als so in meinem Test verwendet:

class SignInTest(FunctionalTest): 
    fixtures = ['admin_user.json', 'protocol.json', 'step.json', 
      'protocol_element.json'] 

    def test_login_and_view_user_data(self): 
     ... 

ich Fehler:

django.db.utils.IntegrityError: Problem installing fixtures: The row in table 'protocols_protocolelement' with primary key '37' has an invalid foreign key: protocols_protocolelement.element_content_type_id contains a value '41' that does not have a corresponding value in django_content_type.id. 

Zweiter Versuch, alle Testdaten in meinen Tabellen beteiligt verwenden, aber ausschließlich contenttypes:

python manage.py dumpdata --indent=2 -e contenttypes > functional_tests/fixtures/initial_data.json 

class SignInTest(FunctionalTest): 
    fixtures = ['initial_data.json'] 
    ... 

Erhalten Sie den Fehler:

django.db.utils.OperationalError: Problem installing fixture '.../mike/mike/functional_tests/fixtures/initial_data.json': Could not load auth.Permission(pk=103): no such table: auth_permission 

Als nächstes habe ich versucht, mit natürlichen, die natürlichen Schlüssel zeigen:

python manage.py dumpdata --natural -e contenttypes -e auth.Permission --indent=2 > functional_tests/fixtures/initial_data2.json 

Nur um den Fehler zu erhalten:

django.db.utils.OperationalError: Problem installing fixture '.../mike/mike/functional_tests/fixtures/initial_data.json': Could not load auth.User(pk=1): no such table: auth_user 

Noticing natürliche abgeschrieben wurde ich versuchte, --natürlich-fremd und wollte Benutzer- und Berechtigungsmodelle einschließen (ich benötige sowieso Contenttypen für meine Modelle):

Nur um den Fehler zu erhalten:

django.db.utils.IntegrityError: Problem installing fixture '.../mike/mike/functional_tests/fixtures/initial_data3.json': Could not load contenttypes.ContentType(pk=35): UNIQUE constraint failed: django_content_type.app_label, django_content_type.model 

Also, alle Ideen auf, wie das Gerät zu laden, so kann ich meine Tests ausführen? Gibt es etwas Einfaches, das mir fehlt? Vielen Dank!

Antwort

10

Nachdem einige weitere Lesung darüber, wie Django seine eigenen Modelle unterhält und so, es ist mein Verständnis, dass Django die content-Caches, auth.Permission, etc. und verwendet sie in Test-Frameworks (I wurde mit StaticLiveServerTestCase). Das bedeutet, dass ich beim Laden meines Scheinwerfers mit den Daten, die Django für seine eigenen Zwecke gespeichert hatte, kollidierte und den Integritätsfehler verursachte. Dies ist, was für mich gearbeitet:

python manage.py dumpdata -e contenttypes -e admin -e auth.Permission --natural-foreign --indent=2 > functional_tests/fixtures/initial_data4.json 

Dieser Beitrag hat einige zusätzliche hilfreiche Informationen, mir zu helfen das Problem zu lösen: Problems with contenttypes when loading a fixture in Django.