Jest 16.0: Turboaufladung der CLI & Community-Update
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Es ist einen Monat seit dem letzten Major-Release vergangen, und wir haben Jest in dieser Zeit erheblich verbessert. In diesem Major-Release aktualisieren wir das verwendete Snapshot-Format, was beim Upgrade von Jest wahrscheinlich eine Anpassung der Snapshots erforderlich macht. Wir nehmen solche Änderungen nicht leichtfertig vor und erwarten nicht, dass dies häufig vorkommt, aber wir halten es für notwendig, das Format gelegentlich zu optimieren.
Verbesserte CLI

Jest 16 bietet eine neue Reporter-Oberfläche, die laufende Tests, eine Live-Zusammenfassung und einen Fortschrittsbalken basierend auf der geschätzten Laufzeit vorheriger Testdurchläufe anzeigt. Wir haben auch die CLI-Ausgabe optimiert, damit sie besser mit verschiedenen Farbschemata funktioniert. Wenn in einem vorherigen Durchlauf Testfehler auftraten, führt Jest diese Tests nun immer zuerst aus, um Nutzern möglichst schnell aussagekräftige Signale zu liefern.
Wir haben außerdem viele neue Funktionen hinzugefügt, die für Sie nützlich sein könnten:
-
Neue CLI-Flags wurden hinzugefügt: Eine
--testNamePattern=patternoder-t <pattern>Option zum Filtern von Tests über die Kommandozeile, ähnlich wieit.onlyoderfitin Tests. -
Zuvor fehlgeschlagene Tests werden jetzt immer zuerst ausgeführt.
-
jest <pattern>ist jetzt case-insensitive, um das Filtern von Testdateien zu erleichtern. -
Ein Testlauf im Watch-Modus kann jetzt unterbrochen werden. Während eines Testlaufs drücken Sie einfach eine der für die Eingabe im Watch-Modus verwendeten Tasten (
a,o,p,qoderenter), um den Testlauf abzubrechen und einen neuen zu starten. -
Das
--bail-Flag funktioniert jetzt auch im Watch-Modus. Zusammen mit dem priorisierten Ausführen fehlgeschlagener Tests fühlt sich Jests Watch-Modus jetzt wie turboaufgeladen an! -
Jest berücksichtigt jetzt automatisch Dateien und Tests mit der
jsx-Erweiterung. -
Jest warnt vor doppelten manuellen Mock-Dateien und wir haben automatisch erstellte Mocks für mit babel kompilierte ES-Module verbessert.
-
Eine
jest.clearAllMocks-Funktion wurde hinzugefügt, um alle Mocks zwischen Tests zurückzusetzen. -
Wir haben die Modulauflösung bei Verwendung von
moduleNameMapperoptimiert. -
Schließlich wurde eine
--findRelatedTests <fileA> <fileB>CLI-Option hinzugefügt, um Tests auszuführen, die mit den angegebenen Dateien verknüpft sind. Dies ist besonders nützlich als Pre-Commit-Hook, wenn Sie Tests nur für einen bestimmten Satz von Dateien ausführen möchten, die Tests enthalten.
So sieht Jest aus, wenn ein Testlauf im Watch-Modus unterbrochen wird: 
Snapshot-Aktualisierungen
Jests Snapshot-Implementierung wurde komplett neu geschrieben. Die neue Version des jest-snapshot-Pakets ist nun so strukturiert, dass sie eine einfachere Integration in andere Testrunner ermöglicht und weitere coole Integrationen wie mit React Storybook möglich macht. Jest markiert Snapshots nicht als veraltet in Dateien mit übersprungenen oder fehlgeschlagenen Tests. Wir haben auch mehrere Änderungen am Snapshot-Format vorgenommen:
-
Objekte und Arrays werden jetzt mit einem nachgestellten Komma ausgegeben, um zukünftige Änderungen an Snapshots zu minimieren.
-
Wir haben Funktionsnamen aus Snapshots entfernt. Sie verursachten Probleme mit verschiedenen Node-Versionen, bei der Code-Coverage-Instrumentierung und wir empfanden es generell als nicht nützlich, dem Nutzer anzuzeigen, dass sich ein Funktionsname geändert hat.
-
Snapshots werden jetzt innerhalb einer Datei in natürlicher Sortierreihenfolge angeordnet.
Beim Upgrade auf Jest 16 könnte der Diff ähnlich wie dieser aussehen: 
Testbibliotheks-Updates
Wir haben die Migration der Jasmine-Assertions zu den neuen Jest-Matchers abgeschlossen. Drei neue Matcher wurden hinzugefügt: toBeInstanceOf, toContainEqual und toThrowErrorMatchingSnapshot. Die Fehlermeldungen für die Spy/Mock-Matcher toHaveBeenLastCalledWith, toHaveBeenCalledWith, lastCalledWith und toBeCalledWith sind jetzt besser lesbar. Nachdem wir alle Assertions überarbeitet und in ein eigenes Paket ausgelagert haben, arbeiten wir daran, sie eigenständig nutzbar zu machen, damit sie in beliebige Testframeworks integriert werden können.
Zusätzlich haben wir auf Community-Wunsch mehrere Aliase eingeführt: Um Jest auf einen einzelnen Test zu fokussieren, könnt ihr nun it.only, test.only oder weiterhin fit verwenden. Zum Überspringen eines Tests stehen it.skip oder test.skip neben xit zur Verfügung. Um einen Test als nebenläufig zu markieren, könnt ihr test.concurrent nutzen – besonders hilfreich bei Tests, die auf Netzwerkressourcen oder Datenbanken zugreifen.
Falls ihr das globale expect durch eine andere Assertion-Bibliothek wie chai ersetzen möchtet, ist dies nun über die Konfigurationsoption setupTestFrameworkScriptFile möglich.
Community-Update
Im letzten Monat sind zahlreiche Artikel über Jest's Snapshot-Testing, Migration zu Jest und Test-Grundlagen erschienen. Ich habe auch einige Live-Videos erstellt, die die Funktionsweise von Jest und Snapshot-Testing erklären:
Mehrere Autoren haben Artikel über Snapshot-Testing verfasst. Der pointierteste Beitrag, der mit dem Jest-Team resonierte, war "Testing with Jest Snapshots: First Impressions". Ben nennt drei wesentliche Punkte in seinem Blogpost:
-
Snapshot-Tests ergänzen konventionelle Tests, ersetzen sie aber nicht.
-
Snapshot-Tests entfalten ihre Stärken besonders mit einem etablierten Code-Review-Prozess.
-
Snapshot-Tests harmonieren gut mit Auto-Mocking.
Wir empfehlen dringend, den gesamten Beitrag zu lesen. Ben hat hervorragend erklärt, warum wir Snapshot-Testing entwickelt haben. Wichtig ist: Wir haben Snapshot-Testing nicht eingeführt, um andere Testmethoden zu ersetzen, sondern um Entwicklern Tests für Code zu ermöglichen, der sonst ungetestet bliebe. Es eignet sich ausgezeichnet für React-Komponenten, CLI-Ausgaben, Fehlermeldungen und viele andere Anwendungsfälle, löst aber nicht alle Probleme. Jests Ziel ist es, vielfältige Testmöglichkeiten ohne Leistungseinbußen oder Wartungsprobleme bereitzustellen.
Weitere Highlights zum Thema Snapshot-Testing:
-
Eine React-Native-Testserie: Teil 1: Jest – Snapshot-Testing kommt ins Spiel und Teil 2: Jest – Snapshots für Redux-Actions und Reducer.
-
Warum wir uns für Jest Snapshot-Testing in JavaScript entschieden.
-
Wenn du das beliebte Test-Hilfsmittel enzyme verwendest, gibt es jetzt das Projekt enzyme-to-json, das die Verwendung von Jest's Snapshot-Testing mit enzyme ermöglicht.
Redux selbst nutzt nun Jest und Max Stoiber hat ein Tutorial zum Testen von Redux-Code verfasst. Es gibt auch eine hervorragende Anleitung zum Testen von MobX. Wenn du create-react-app verwendest, ist Jest jetzt standardmäßig enthalten. Kent C. Dodds hat eine Reihe von Videos auf egghead.io erstellt, die dir den Einstieg in Jest erleichtern.
Falls du andere Test-Runner verwendest, hat Kenneth Skovhus die großartige jest-codemods-Bibliothek entwickelt, die die Konvertierung automatisiert. Codemods sind fantastisch: Sie ermöglichen dir eine schnelle Einschätzung, ob Jest für dich geeignet ist. Probier es aus!
Das vollständige Changelog findest du auf GitHub. Jest 16 war ein echtes Gemeinschaftsprojekt der JavaScript-Community und das Projekt hat jetzt über 220 Mitwirkende. Wir danken jedem Einzelnen von euch für die Unterstützung, die dieses Projekt großartig macht.
