Jest 25: 🚀 Grundlagen für die Zukunft legen
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Jest 25 legt den Grundstein für viele bedeutende zukünftige Änderungen. Daher haben wir Breaking Changes auf ein Minimum beschränkt, doch interne Architekturänderungen könnten beim Upgrade Aufmerksamkeit erfordern. Die Hauptänderungen sind ein Upgrade von JSDOM von v11 auf v15, 10-15% schnellere Testläufe, eine neue Diff-Ansicht für veraltete Snapshots und der Wegfall der Node-6-Unterstützung.
Seit Jest 24.9 gab es über 200 Commits von mehr als 80 verschiedenen Mitwirkenden. Werfen Sie wie immer einen Blick in das Changelog für die vollständige Änderungsliste.
Abschied von Node 6
Node 6 ist seit dem 30. April 2019 EOL, und Jest 25 lässt es hinter sich. Der Wegfall von Node 6 ermöglicht das Upgrade unserer Abhängigkeiten, insbesondere JSDOM, das auf Version 15 aktualisiert wurde. Dies bedeutet auch, dass wir async-await-Syntax nicht mehr transpilieren müssen, was sowohl schnellere Codeausführung als auch geringeren Speicherverbrauch bringt. Als Bonus ist Jests transpilierter Code einfacher zu debuggen, falls jemand in dieses spezielle Kaninchenloch fällt.
Obwohl auch Node 8 EOL erreicht hat, unterstützt Jest 8 es weiterhin, um das Upgrade für Nutzer mit Node-8-Support zu erleichtern. Dies hat jedoch Kompromisse zur Folge: Da JSDOM v16 ohne Node-8-Unterstützung veröffentlicht wurde, benötigen Sie jest-environment-jsdom-sixteen für die neueste Version.
Leistungsverbesserungen
Wir erhielten Berichte, dass Jest in letzten Releases langsamer wurde. Jest 25 enthält ein Micromatch-Upgrade mit deutlichen Startzeitverbesserungen sowie Bugfixes und Optimierungen, die Jests Geschwindigkeit auf Jest-23-Niveau zurückbringen. Für Jest selbst bedeutet dies – wie eingangs erwähnt – 10-15% kürzere Testlaufzeiten. Wir streben stets nach Verbesserungen: Bitte vergleichen Sie die Leistung mit früheren Versionen und melden Sie Issues, wo wir besser sein könnten!
V8-Codeabdeckung
Jests aktuelle Codeabdeckungs-Instrumentierung nutzt babel-plugin-istanbul, das Abdeckungscode vor Berichterstellung einfügt. Dies ist jedoch langsam und speicherintensiv, besonders bei großen Codebasen. Glücklicherweise bietet V8 eingebaute Codeabdeckung, die in Node durch Benjamin Coe und andere immer nutzbarer wird. Jest 25 unterstützt dies experimentell via --coverage-provider-Flag – lesen Sie die Dokumentation für Details und Einschränkungen.
Schnelles und langsames Denken bei Testfehlern
Unnötiger Interpretationsaufwand bei fehlgeschlagenen Tests behindert:
-
„Schnelles Denken“: Mustererkennung aus Erfahrung
-
„Langsames Denken“: Analyse von Änderungen zur Entscheidung, ob erwarteter Fortschritt oder unerwartete Regressionen vorliegen
Jest 25 vollendet die in Jest 24 begonnene Optimierung aller Matcher:
-
Korrekte Beschreibungszeilen inklusive
.rejects-,.resolves- und.not-Modifikatoren -
Prägnante Labels und konsistente Ausrichtung für erwartete/erhaltene Werte
-
Invertierte Hervorhebung von Teilstring-Unterschieden bei String-Vergleichen
-
Zeilenänderungszählung zur Unterscheidung von Lösch-/Einfügevorgängen
Besonderer Dank an Jest-Maintainer Mark Pedrotti für diese Initiative und seine fortwährende Arbeit an optimalen Erwartungsfehlern.
Farben bei fehlgeschlagenen Snapshot-Tests
Die offensichtlichste Änderung für mehr Klarheit statt Verwirrung sind die Farben von Änderungszeilen bei Snapshot-Testfehlern:
-
- Snapshotwechselt von Grün zu Magenta -
+ Receivedwechselt von Rot zu Türkis (Vordergrund) auf Cyan/Aqua-Hintergrund
Beispiele für Snapshot-Testberichte (links vorher, rechts nachher)
- Zeilenänderungszählungen bestätigen den ersten Eindruck der Snapshot-Änderungsrichtung (Löschung/Einfügung)

- Hintergrundfarben lenken den Blick zum Vergleich benachbarter Änderungszeilen

- Hintergrundfarben helfen auch bei
toThrow-Tests, Entscheidungen über Snapshot-Updates zu treffen

Gründe für unsere Farbwahl:
-
95% der Nutzer mit vollem Farbsehvermögen erkennen sofort Snapshot-Testberichte gegenüber anderen Matchern
-
Lösung des Konflikts zwischen Grün/Rot in Jest-Tests versus Rot/Grün in Code-Reviews
-
Anders als Rot/Grün-Reversionen (die Updates als Default suggerieren) signalisiert es: Unterschiede erfordern sorgfältigere Prüfung auf Regressionen bei lokalen Snapshot-Fehlern als in Code-Reviews (wo Probleme bereits behoben sind)
Der Farbtonunterschied von Magenta (300°) zu Türkis/Cyan/Aqua (180°) verbessert die Farbzugänglichkeit. Der helle Hintergrundton bietet konsistenten Kontrast bei hellen/dunklen Themes.
CLI-Tool-Entwickler finden Inspiration zur Barrierefreiheit in #9132.
ECMAScript-Modul-Unterstützung
Node 13 bietet ungeflaggte ESM-Unterstützung. Wir arbeiten an nativer Integration in Jest. Jest 25 unterstützt bereits jest.config.cjs und jest.config.mjs, aber Tests selbst benötigen noch Transformation via Babel/TypeScript zu CJS.
Die benötigten APIs sind noch experimentell – erwarten Sie keine sofortige Unterstützung. Das Node.js-Modul-Team arbeitet aktiv daran. Wir beobachten die Entwicklung, experimentieren und geben Feedback. Folgen Sie diesem Issue für Updates.
Weitere Verbesserungen und Updates
-
Jest hat 1000 einzigartige Mitwirkende erreicht – ein unglaublicher Meilenstein! Dank an alle, die Testing so angenehm wie möglich machen.
-
Dank Community-Mitglied Josh Rosenstein unterstützt Jest nun
BigIntin Matchern wietoBeGreaterThan. BigInt-Literale werden sofort verstanden. -
Jests
--detect-leaks-Funktion war für Node 12+ defekt – dies wurde in Jest 25 behoben. -
Wie im Jest-24-Blogpost angekündigt, wurde Jests Codebase in TypeScript umgeschrieben (abgeschlossen in Jest 24.3). Nutzer einzelner Jest-Teile erhalten bessere IDE-Integration. Für die Zukunft wollen wir Jest-Mocks besser mit Typsystemen integrieren und freuen uns über Community-Hilfe: Teilen Sie Ideen hier und senden Sie PRs! Wir prüfen auch, Typdefinitionen für Jest als Testrunner von DefinitelyTyped in Jest zu überführen.
-
Das
jest-diff-Paket exportiert nun Funktionen wiediffLinesUnifiedunddiffStringsUnifiedmit Konfigurationsoptionen, sodass andere Anwendungen Unterschiede auf benutzerdefinierte Weise formatieren können. Weitere Informationen und Codebeispiele finden Sie in der neuenREADME.md-Datei im Jest-Repository oder in Paket-Repositories. -
Dank des Community-Mitglieds Wei An An Yen hebt Jest bei Erwartungsfehlern keine erfolgreichen asymmetrischen Matcher mehr hervor. Dies war ein langjähriges Problem mit asymmetrischen Matchern, und wir freuen uns sehr, dass es endlich gelöst ist.
-
Zum zweiten Mal in Folge gewann Jest den Highest Satisfaction Award von State of JS. Wir sind unglaublich dankbar für die Unterstützung der Community und hoffen, diesen Schwung nutzen zu können, um 2020 noch besser zu werden!
Pläne für die Zukunft
-
Jests Konfiguration ist umfangreich und etwas umständlich – oft gibt es mindestens zwei Wege, dieselbe Sache zu tun, manchmal sogar mehr. Für Jest 26 wollen wir die Konfiguration straffen und vorhersehbarer gestalten. Details finden Sie in diesem Issue.
-
Wir planen außerdem eine ordentliche programmatische API für die Ausführung von Jest, um die Integration in IDEs und andere Tools zu erleichtern. Bitte verfolgen Sie dieses Tracking-Issue.
-
Ein offener PR zur Integration von Lolex als Implementierung von Jests Fake-Timern existiert seit Dezember 2017. Obwohl wir es in Jest 25 nicht in öffentliche APIs aufnehmen, ist die Unterstützung technisch vorhanden, und wir prüfen, wie wir sie verfügbar machen können, damit Nutzer sie testen und experimentell nutzen können. Damit lassen sich
Dateund andere Timer-Funktionen mocken, die Jest derzeit nicht anfasst. Beachten Sie, dass dies als experimentell gilt – ordentliche API-Unterstützung folgt in einer späteren Version. Verfolgen Sie diesen PR für aktuelle Statusupdates.
Viel Spaß beim Testen! 🃏
