Ich versuche eine Dienstfunktion zu testen, die ich verwende, um ein Widget mit einem Mongoose-Modell zu speichern. Ich möchte die Methode zum Speichern von Instanzen in meinem Modell ausschließen, aber ich kann keine gute Lösung finden. Ich habe andere Vorschläge gesehen, aber keine scheint vollständig zu sein.
Hier ist mein Modell ...
%Vor%Hier ist mein Service ...
%Vor%Mein Service ist sehr einfach. Es akzeptiert einige JSON-Daten, erstellt ein neues Widget und speichert das Widget dann mit der Instanzmethode "save". Es ruft dann zurück und übergibt einen Fehler und ein Dokument basierend auf dem Ergebnis des Speicheraufrufs.
Ich möchte das nur testen, wenn ich createWidget ({title: 'Widget A'}) ...
anrufeUm das isoliert zu testen, müsste ich wahrscheinlich ...
Ich habe Probleme herauszufinden, wie ich das mit Sinon machen kann. Ich habe mehrere Varianten auf den Seiten von SO ohne Glück versucht.
HINWEISE:
Vielen Dank für Ihre Hilfe.
Wenn ich das testen würde, würde ich so vorgehen, zuerst eine Möglichkeit, mein verspottetes Widget in den Widget-Dienst zu injizieren. Ich weiß, dass es einen
Sobald ich das richtig verstanden habe, erstelle ich meinen Widget-Service mit meinem Mock-Widget-Modul. Dann mache ich so etwas (das verwendet mocha übrigens):
%Vor%Dies ist nur ein Beispiel, meine Tests werden manchmal komplizierter. Es kommt vor, dass die Backend-Aufruf-Funktion (hier ist es, widget.save), die ich spotten möchte, diejenige ist, die ich möchte, dass sich ihr Verhalten mit jedem anderen Test ändert, deshalb lege ich den Stub jedes Mal zurück .
Hier ist auch ein anderes Beispiel für ähnliche Dinge: Ссылка
So würde ich es machen. Ich benutze Mocker , um das Laden des Moduls zu manipulieren. Der Code von widgetservice.js
muss geändert werden, damit require('./widget');
ohne die Erweiterung .js
aufgerufen wird. Ohne die Änderung funktioniert der folgende Code nicht, da ich die allgemeine empfohlene Vorgehensweise zur Vermeidung von Erweiterungen in require
-Aufrufen verwende. Spott ist klar, dass die Namen, die an den Aufruf require
übergeben werden, genau übereinstimmen müssen.
Der Testläufer ist Mocha .
Der Code folgt. Ich habe umfangreiche Kommentare in den Code selbst geschrieben.
%Vor%Sofern ich etwas nicht verpasst habe, deckt dies alle Tests ab, die in der Frage erwähnt wurden.
Mit der aktuellen Version von Mongoose können Sie create
method
Dann, um die Methode zu testen (mit Mocha)
%Vor%Auch, wenn Sie verkettete Methoden verspotten möchten, verwenden Sie sinon-mongoose .
Tags und Links javascript unit-testing node.js mongoose sinon