Ich versuche, eine Klasse Mailer
mit Spaß zu verspotten und ich kann nicht herausfinden, wie es geht. Die Dokumentation gibt nicht viele Beispiele dafür, wie das funktioniert. Der Prozess ist der Ich werde ein Knotenereignis password-reset
haben, das ausgelöst wird, und wenn dieses Ereignis ausgelöst wird, möchte ich eine E-Mail senden, die Mailer.send(to, subject, body)
verwendet. Hier ist meine Verzeichnisstruktur:
Hier ist meine Mock-Datei __mocks__/mailer.js
:
und mein mailer.test.js
und schließlich my mailer.js
class:
Also, wie kann ich diese Klasse mit Jest erfolgreich verspotten und testen? Vielen Dank für Ihre Hilfe!
Sie müssen nicht Ihre Mailer-Klasse verspotten, sondern das mailgun-js
-Modul. Also mailgun ist eine Funktion, die die Funktion messages
zurückgibt, die die Funktion send
zurückgibt. Also wird der Schein so aussehen.
für den glücklichen Weg
%Vor%für den Fehlerfall
%Vor%Wie Sie diese 2 Fälle haben, macht es Sinn, das Modul in Ihrem Test zu verspotten. Zuerst müssen Sie es mit einem einfachen Spion verhöhnen, wo wir später die Implementierung für unsere Fälle festlegen können und dann müssen wir das Modul importieren.
%Vor% Da Ihr Modul Versprechungen verwendet, haben wir zwei Möglichkeiten, entweder das Versprechen aus dem Test zurückzugeben oder async/await
zu verwenden. Ich benutze den späteren für weitere Informationen. Schauen Sie sich hier an.
Wenn Sie testen möchten, dass die Methode mailgun send
mit dem richtigen Parameter aufgerufen wurde, müssen Sie den Mock wie folgt anpassen:
Jetzt konnten Sie überprüfen, ob der erste Parameter zum Senden korrekt war:
%Vor%Nur für Googler und zukünftige Besucher, hier ist, wie ich JEST für ES6-Klassen verspottet habe. Ich habe auch ein Arbeitsbeispiel bei github , mit babel-jest, um die Syntax des ES-Moduls zu transpilieren, damit der Scherz spotten kann sie richtig.
__ Mocks __ / MockedClass.js
%Vor%Ihr Code kann dies mit neuen aufrufen, und in Ihren Tests können Sie die Funktion aufrufen und jede Standardimplementierung überschreiben.
Beispiel.spec.js
%Vor%Tags und Links javascript unit-testing jestjs