Skip to main content

6 Phasen beim Refactoring eines Jest-Testfalls

Artikel von

4. September 2019

0 Min. Lesezeit

Eine oft unterschätzte Funktion von Jest ist, festzulegen, wie Assertion-Fehler behandelt werden, die die Konsole bei fehlgeschlagenen Tests ausgibt. Stellen Sie sich den folgenden Testcode vor, der ein Objekt programmgesteuert durchlaufen muss, um sicherzustellen, dass die erwarteten Schlüssel vorhanden sind (mithilfe der Funktion expect):

Dunkler Code-Editor mit einem Jest-Test, der prüft, ob JavaScript-Dateien entsprechende Anwendungsklassen haben.

Der Test ist korrekt geschrieben. Stellen Sie sich nun vor, ein Entwickler im Team nimmt Änderungen am Code vor: Er fügt an einer Stelle eine neue Datei hinzu und vergisst, sie an einer anderen wichtigen Stelle desselben Projekts einzubinden, etwa dafür zu sorgen, dass sie korrekt exportiert wird.

Beim nächsten Testlauf schlägt der Test fehl. Der Grund ist jedoch für die meisten nicht offensichtlich. Und wenn Sie den Code noch nicht kennen, wissen Sie wahrscheinlich nicht einmal, was kaputtgegangen ist. Probieren Sie es aus:

Dunkler Code-Editor mit einem fehlgeschlagenen Jest-Test: validators sollte exportiert werden, mit Received: undefined und einem Assertion-Fehler in Zeile 13.

Aus diesem Grund verlangt Jest außerdem die Verwendung von toHaveProperty() mit expect. Das sieht so aus:

Dunkler Code-Editor mit JavaScript-Code, der aus jedem Dateinamen einen Klassennamen ableitet und die erwartete Eigenschaft testet.

Wenn ein Test jetzt fehlschlägt, ist zumindest klarer, welche Eigenschaft fehlt. Wie Sie im nächsten Screenshot sehen, ist die Meldung aber immer noch etwas kryptisch. Was können wir tun? ?

Dunkler Code-Editor mit einem Jest-Testfehler: Alle Validator-Klassen sollten aus index.js exportiert werden.

An diesem Punkt reichen die bereits vorhandenen Anmerkungen vielleicht aus. Der Testname erklärt sich von selbst, wie Sie sehen. Allerdings schlägt nur ein Testfall fehl, und anhand eines Test-Traces lässt sich nicht eindeutig erkennen, welche Validatoren verwendet wurden.

Refaktorieren wir den Code:

Dunkler Code-Editor mit Jest-Tests, die überprüfen, ob Validator-Klassen aus index.js exportiert werden

Wenn mein Test jetzt besteht oder fehlschlägt, ist viel offensichtlicher und intuitiver, was genau getestet wurde, was genau fehlgeschlagen ist und warum:

Terminalausgabe mit erfolgreich bestandenen Jest-Tests für Validatoren in app.test.js, darunter ValidateHost.js und ValidateHttps.js.

Viel besser! ???


Wenn Sie Jest genauso lieben wie ich (?) , interessieren Sie vielleicht auch einige meiner anderen Beiträge zu Jest:

Wenn Sie sich auch für Web-Sicherheit interessieren, würde ich mich freuen, Sie in der Slack-Community von The Secure Developer oder auf Twitter zu treffen, falls Ihnen das lieber ist.

Gepostet in: