Wie bekomme ich 'InternalError: table "dev ~ guestbook !! Entitäten existieren bereits, wenn ich gerade einen Datenspeicher erstellt habe?

8

Ich versuche herauszufinden, wie Test Driven Development für GAE eingerichtet wird.

Ich starte die Tests mit:

%Vor%

Ich bekomme immer den Fehler:

%Vor%

Der Datenspeicher existiert nicht, bis ich ihn im setUp () erstelle, aber ich bekomme immer noch einen Fehler, dass die Entitäten bereits existieren?

Ich verwende den Code aus dem GAE-Lernprogramm .

Hier ist mein Testcode in functional_tests.py:

%Vor%

Hier ist die Rückverfolgung:

%Vor%     
BryanWheelock 11.05.2015, 15:59
quelle

2 Antworten

5

Es sieht so aus, als ob hier ein paar Dinge passieren.

Zunächst sieht es so aus, als ob Sie mit NaseGAE --with-gae arbeiten. Das Plug-in kümmert sich um das Einrichten und Herunterfahren Ihres Testbeds, damit Sie es nicht tun müssen. Dies bedeutet, dass Sie keinen der self.testbed -Codes benötigen und tatsächlich intern Konflikte verursachen können. Entweder wechseln Sie, um es die NaseGAE Weg zu tun, oder verwenden Sie nicht das --with-gae Flag. Wenn Sie bei NoseGAE bleiben, verfügt es über die Option --gae-datastore , mit der Sie den Pfad zum Datenspeicher festlegen können, der für Ihre Tests verwendet wird. Setzen Sie dann innerhalb Ihrer Testklasse die Eigenschaft nosegae_datastore_v3 = True , damit sie für Sie eingerichtet wird:

%Vor%

Zweitens, so wie dev_appserver / sqlite zusammenarbeitet, lädt der Anwendungsserver die sqlite-db-Datei in den Speicher und arbeitet dort mit. Wenn der Anwendungsserver beendet wird, werden die Datenbankinhalte auf den Datenträger zurückgespült. Da Sie für Ihre Tests den gleichen Datenspeicher verwenden wie den Prozess dev_appserver.py, den Sie für Selen öffnen, sehen sie möglicherweise die Fixture-Daten, die Sie in Ihrem Test eingerichtet haben, oder nicht.

Hier ist ein Beispiel aus Ссылка

%Vor%     
Josh J 14.05.2015, 23:47
quelle
2

Ich denke, diese Zeile könnte die fehlerhafte sein:

%Vor%

Einstellung von datastore_file="/ tmp / datastore / datastore.db" bedeutet, dass Sie diesen vorhandenen Datenspeicher in Ihren Tests wiederverwenden möchten

Die Dokumentation zum Python-Code sagt:

  

Das Argument 'datastore_file' kann der Pfad zu einem vorhandenen sein       Datenspeicherdatei oder None (Standard), um einen speicherinternen Datenspeicher zu verwenden       Das ist zunächst leer.

Persönlich verwende ich diese in meinen Tests:

%Vor%     
JonathanK 14.05.2015 17:22
quelle