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:

Weiterlesen

Live Stream

Remediation Agents einfach erklärt: Warum Beheben wichtiger ist als Finden

Erfahren Sie, wie Snyks Remediation Agent mithilfe von Security-Intelligence, Breakability-Analysen und Validierung Schwachstellen in mergefähige Pull Requests verwandelt.

feature ai ide dark
Blog

Ein erster Blick auf Evo Agentic AppSec: agentische Behebung und Schutz vor bösartigem Code

Entdecken Sie die ersten Agentic-AppSec-Funktionen von Snyk: einen autonomen Remediation Agent, der Schwachstellen behebt, und Malicious Code Defense, das riskante Pakete vor der Veröffentlichung blockiert.

feature insights context
Blog

Der keyv-npm-Angriff: Preinstall-Malware, vertrauenswürdige Provenance und IDE-Hooks

keyv 6.0.0 und zehn weitere npm-Releases enthielten Malware, die bei der Installation ausgeführt wird. Erfahren Sie, welche Versionen betroffen sind, welche Hashes gelten, wie Sie die Malware erkennen und in welcher Reihenfolge Sie sicher reagieren.