Ich benutze Jasmine-Node, um Tests gegen meine Nodejs-Funktionen auszuführen. Da ich neu bei nodejs und mongodb bin, habe ich zuerst einige Datenbankaufrufe getestet und bin sofort wegen der asynchronen Natur von nodejs hängengeblieben.
Was ich machen möchte ist:
1) Fügen Sie eine add
-Funktion hinzu, um neue Einträge zu einer mongodb-Tabelle hinzuzufügen
2) Empfangen Sie eine Statuszeichenfolge von dieser Funktion, um den Status der Aktion zu überprüfen
Das Folgende ist der Code meiner Spezifikation. Im beforeEach
Aufruf initialisiere ich die Datenbank. Wie Sie in der Implementierung sehen können, wird es nur einmal instanziiert, weil eine Bedingung fragt, ob es bereits existiert.
Jetzt kann ich für jede Datenbankabfrage eine Callback-Funktion definieren, die ausgeführt wird, wenn die Abfrage erfolgreich ausgeführt wurde. Was ich nicht weiß, wie zu erreichen ist, liefert das Ergebnis aus dem mongodb Callback zurück die Spezifikation.
Dies ist die aktuelle Implementierung der Datenbankfunktionen:
%Vor%Ich bin auch offen für andere Ansätze zum Testen von Datenbankaufrufen in mongodb. Ich habe eine Reihe von Artikeln zu diesem Thema gelesen, aber keiner von ihnen deckt meinen speziellen Fall ab.
LÖSUNG
Schließlich und mit der Hilfe von JohnnyHK's Antwort, habe ich es geschafft, es mit einem Rückruf arbeiten zu lassen. Sehen Sie sich den folgenden Testfall an, um zu verstehen, was ich getan habe:
%Vor% Sie können dies jetzt viel sauberer mit der Funktion done
in Jasmine-node tun:
Dieser Test wartet, bis done()
asynchron aufgerufen wird. Es gibt ein Standard-Zeitlimit von 5 Sekunden, nach dem Ihr Test fehlschlägt. Sie können dies beispielsweise in 15 Sekunden ändern:
Tags und Links node.js mongodb jasmine-node