Wie man ES6-Klasse mit Jest macht

8

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:

%Vor%

Hier ist meine Mock-Datei __mocks__/mailer.js :

%Vor%

und mein mailer.test.js

%Vor%

und schließlich my mailer.js class:

%Vor%

Also, wie kann ich diese Klasse mit Jest erfolgreich verspotten und testen? Vielen Dank für Ihre Hilfe!

    
dericcain 03.05.2017, 01:56
quelle

2 Antworten

13

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.

%Vor%

Wenn Sie testen möchten, dass die Methode mailgun send mit dem richtigen Parameter aufgerufen wurde, müssen Sie den Mock wie folgt anpassen:

%Vor%

Jetzt konnten Sie überprüfen, ob der erste Parameter zum Senden korrekt war:

%Vor%     
Andreas Köberle 03.05.2017, 11:29
quelle
3

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%     
Justus Romijn 18.10.2017 14:28
quelle

Tags und Links