Zum Hauptinhalt springen

🃏 Jest 19: Immersiver Watch-Modus & Verbesserungen der Testplattform

· 8 Minuten Lesezeit
Rogelio Guzman
Rogelio Guzman
Inoffizielle Beta-Übersetzung

Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →

Heute freuen wir uns, Version 19 der Jest-Testplattform auszuliefern. Es ist die bisher größte Jest-Veröffentlichung und wir sind sehr gespannt, Ihnen zu zeigen, was wir in den letzten zwei Monaten aufgebaut haben:

Immersiver Watch-Modus

Wir haben den Watch-Modus komplett neu geschrieben, um ihn sofort und erweiterbar zu machen. Dadurch ist die Nutzungserfahrung wirklich immersiv: Tests werden sofort nach einer Dateiänderung erneut ausgeführt und wir haben es einfach gemacht, die richtigen Tests auszuwählen.

Snapshot-Aktualisierungen

Wir haben einige Änderungen am Snapshot-Format vorgenommen. Solche Änderungen machen wir nicht oft und ziehen sie nur in Betracht, wenn sie tatsächlich die Funktionsweise von Snapshots verbessern. Neben der Einführung einer Snapshot-Versionsnummer haben wir mehrere Änderungen umgesetzt, die wir schon länger am Format vornehmen wollten:

  • Wir haben das Präfix "test" in Snapshot-Namen von Top-Level-test- oder it-Aufrufen entfernt.

  • Wir haben die Darstellung von React-Elementen optimiert, um weniger Änderungen zu verursachen, wenn sich die letzte Property eines Elements ändert.

  • Wir haben den Zeichen-Escape-Mechanismus robuster gestaltet.

Vorher:

exports[`test snap 1`] = `
<header>
<h1>
Jest \"19\"
</h1>
<Subtitle
name="Painless JavaScript Testing" />
</header>
`;

Nachher (ohne "test"-Präfix, bessere JSX-Darstellung, Versionskopfzeile):

// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`snap 1`] = `
<header>
<h1>
Jest "19"
</h1>
<Subtitle
name="Painless JavaScript Testing"
/>
</header>
`;

Wir fanden, es ist ein guter Zeitpunkt, versionierte Snapshots einzuführen, um sicherzustellen, dass alle Entwickler eine kompatible Jest-Version verwenden. So weisen wir Sie darauf hin, wenn Sie Ihr Snapshot aktualisieren müssen:

Snapshot-Version

Bitte stellen Sie sicher, dass Sie alle lokalen Änderungen zurücksetzen, bevor Sie aktualisieren, um einen reibungslosen Übergang zu gewährleisten und zu verhindern, dass unerwünschte Änderungen aus fehlgeschlagenen Tests in Ihre neuen Snapshots übernommen werden.

Verbesserte Darstellung übersprungener Tests

Übersprungene Tests werden jetzt als einzelne Zeile ausgegeben, anstatt jeden einzelnen anzuzeigen, wenn im ausführlichen Modus oder einer einzelnen Suite getestet wird. So können Sie sich hoffentlich besser auf die aktuell wichtigen Tests konzentrieren. Es beansprucht auch viel weniger Platz!

Übersprungene Tests

Neue CLI-Argumente

Jest 19 bringt zwei neue coverage-bezogene Argumente mit, die Sie über die CLI ausführen können:

  • --collectCoverageFrom

  • --coverageDirectory

Wir melden jetzt auch Fehler bei ungültigen CLI-Argumenten, anstatt sie zu ignorieren. Aber wir unterstützen Sie mit hilfreichen Fehlermeldungen wie dieser, zum Beispiel wenn Sie jest --watc ausführen:

CLI-Fehler

expect-Verbesserungen

Wir haben nahezu volle Feature-Parität mit dem expect-npm-Paket erreicht. Michael Jackson, der Autor des Pakets, hat zugestimmt, es an das Jest-Projekt zu spenden, was bedeutet, dass jest-matchers in expect umbenannt wird. Da unsere expect-Version nicht vollständig kompatibel sein soll, arbeitet Christopher Chedeau an einem Codemod, um den Übergang schmerzfrei zu gestalten. Christopher hat auch mehrere Verbesserungen an jest-matchers vorgenommen, die es ermöglichen, es außerhalb von Jest zu verwenden und sogar innerhalb von Browsern funktionieren.

eslint-plugin-jest – unser eigenes ESLint-Plugin

Dank Jonathan Kim hat Jest endlich sein eigenes offizielles ESLint-Plugin. Es bietet drei Regeln:

  • no-disabled-tests - Diese Regel verhindert, dass du versehentlich deaktivierte Tests committest.

  • no-focused-tests - Diese Regel verhindert, dass du fokussierte Tests commitest, die alle anderen Tests im selben Testlauf deaktivieren würden.

  • no-identical-title - Verbietet identische Titel in Testnamen.

Du kannst es mit npm install --save-dev eslint-plugin-jest oder yarn add --dev eslint eslint-plugin-jest installieren und durch Hinzufügen von {"plugins": ["jest"]} zu deiner ESLint-Konfiguration aktivieren.

Neues öffentliches Paket: jest-validate

Während wir den Validierungs- und Normalisierungscode für Jests Konfiguration refaktoriert haben, waren wir so begeistert von den neuen Fehlermeldungen, dass wir ihn in ein eigenes Modul ausgelagert haben. Mit Jest 19 heißt unser Paket-Familienzuwachs jest-validate.

jest-validate ist ein generisches Konfigurationsvalidierungstool, das dir bei Warnungen, Fehlern und Deprecation-Hinweisen in deinen JavaScript-Tools hilft. Es zeigt benutzerfreundliche Beispiele korrekter Konfigurationen und bietet eine einfache aber leistungsstarke API. Wir hoffen, es wird deine Projekte bereichern!

validate

Wir freuen uns bekanntzugeben, dass jest-validate seit v0.12 die Konfigurationsoptionen von prettier validiert. Probier es in deinen Projekten aus, gib uns Feedback und verbessere es durch Pull Requests auf GitHub.

Verbesserte asymmetrische Matcher

Wir haben die Implementierung der asymmetrischen Matcher von Jasmine nach Jest migriert und damit die Benutzererfahrung deutlich verbessert. Die Matcher werden jetzt übersichtlich formatiert, wir haben den neuen expect.stringContaining()-Matcher hinzugefügt und ihn mit expect.toMatchObject() kombiniert:

asymmetric-matchers

Bessere manuelle Mocks

Manuelle Mocks funktionieren jetzt endlich mit verschachtelten Ordnern. Beispielsweise wird __mocks__/react-native/Libraries/Text/Text.js nun korrekt gemockt. Wir haben Probleme mit virtuellen Mocks und transitiven Abhängigkeiten behoben und moduleNameMapper optimiert, damit mehrere Muster nicht denselben Mock überschreiben.

Breaking Changes

Wir haben die nie offiziell unterstützte mocksPattern-Konfigurationsoption entfernt und testPathDirs in roots umbenannt, was den Zweck klarer beschreibt. Die Standardkonfiguration für roots ist ["<rootDir>"] und kann angepasst werden, um beliebig viele Verzeichnisse einzubeziehen. Die rootDir-Konfigurationsoption wurde schon immer hauptsächlich als Token für andere Konfigurationsoptionen verwendet, und diese Umbenennung sollte die Konfiguration von Jest verständlicher machen.

Überarbeitete Dokumentation

Wie du vielleicht schon gesehen hast, haben Hector Ramos und Kevin Lacker Jests Dokumentation neu gestaltet. Die Website ist jetzt in Docs und API aufgeteilt:

Die Homepage wurde komplett neu gestaltet, um besser zu vermitteln, worum es bei Jest geht: "Zero configuration testing platform". Wir haben außerdem sichergestellt, dass sie auf Mobilgeräten besser lesbar ist. Und für RSS-Nutzer bieten wir jetzt endlich einen Feed für unseren Blog an.

Neuigkeiten aus der Community

Abschließend freuen wir uns bekanntzugeben, dass der ava-Testrunner Teile der Jest-Plattform übernommen hat und nun grundlegende Snapshot-Unterstützung bietet sowie pretty-format verwendet. Die Konsolidierung der Testinfrastruktur erleichtert das Erlernen von Anwendungstests und ermöglicht uns den Austausch von Best Practices. Wir sind gespannt, was wir in Zukunft von bestehenden Testbibliotheken lernen können.

Den vollständigen Changelog findet ihr auf GitHub. Jest 19 war ein echtes Gemeinschaftsprojekt der JavaScript-Community mit 17 Mitwirkenden für dieses Release. Wir danken jedem Einzelnen von euch für die Hilfe, dieses Projekt großartig zu machen.

Dieser Blogbeitrag wurde von Rogelio Guzman und Michał Pierzchała verfasst.