Jest 24: 💅 Erfrischend, poliert, TypeScript-freundlich
Diese Seite wurde von PageTurner AI übersetzt (Beta). Nicht offiziell vom Projekt unterstützt. Fehler gefunden? Problem melden →
Heute freuen wir uns, die nächste Hauptversion von Jest bekannt zu geben – Version 24! Es sind 4 Monate seit der letzten Nebenversion und 8 Monate seit Jest 23 vergangen, daher ist dieses Upgrade ein großes, mit etwas für jeden! Zu den Highlights gehören integrierte TypeScript-Unterstützung durch die Aktualisierung der Jest-Interna auf Babel 7, die Behebung langjähriger Probleme mit fehlender Konsolenausgabe und Performance-Problemen bei großen Diffs sowie eine brandneue, funkelnde Website. ✨
Eine vollständige Liste aller Änderungen finden Sie im Changelog.
Neue Website
@orta hat ein wunderschönes Redesign der Jest-Website bereitgestellt, das von den Community-Mitgliedern @montogeek und @brainkim implementiert wurde.
Ziel des Redesigns war es, mehr von dem hervorzuheben, was Jest großartig macht, und die Vorstellung zu entkoppeln, dass Jest in erster Linie ein Tool zum Testen von React-Apps ist – Sie können Jest mit allen möglichen Projekten verwenden und wir wollen das offensichtlich machen. Weitere Informationen zu den Ideen hinter dem Redesign finden Sie in diesem Issue.
TypeScript-Unterstützung
Wir haben intern auf Babel 7 für Jest 24 aktualisiert, das Unterstützung für TypeScript-Projekte mitbringt. Das bedeutet, Jest kann das Transpilieren von TypeScript out of the box unterstützen, sofern Sie Babel mit @babel/preset-typescript konfigurieren. Ein Vorbehalt bei der standardmäßigen TypeScript-Unterstützung, ähnlich wie bei Flow, ist, dass Babel nur die Typanmerkungen entfernt, um Ihren Code zu gültigem JavaScript zu machen. Es wird Ihren Code nicht auf Typfehler überprüfen.
Obwohl Jest seit Version 22 (Dezember 2017) Babel 7 unterstützt hat, erforderte es ein Bridge-Modul, um mit Jests Babel-6-Unterstützung kompatibel zu sein. In Jest 24 sind wir vollständig zu Babel 7 migriert, dank der großartigen Hilfe des Community-Mitglieds @milesj. Das Setup ist nun einfacher und wir können andere Babel-7-Features nutzen, wie Konfigurationsladen und automatische modules-Transpilierung. Entfernen Sie bitte babel-core@^7.0.0-bridge.0, da es nicht mehr benötigt wird.
Wenn Sie während der Tests Typüberprüfungen durchführen möchten, sollten Sie ts-jest verwenden. Sie müssen den Transformer konfigurieren, da Jest standardmäßig Babel auf .ts- (und .tsx-) Dateien anwendet. Alternativ können Sie tsc ausführen oder einen Jest-Runner verwenden, um TypeScript gleichzeitig mit Ihren Tests zu transpilieren! Weitere Informationen finden Sie unter jest-runner-tsc.
Weitere Details finden Sie in der Dokumentation.
Wenn Sie aus irgendeinem Grund nicht auf Babel 7 aktualisieren können, können Sie Jest 24 weiterhin mit babel@6 verwenden, solange Sie babel-jest auf Version 23 belassen.
test.todo
Jest 23 führte eine Änderung ein, bei der Tests ohne Implementierung einen Fehler auslösten statt übersprungen zu werden. Diese Änderung erfolgte aufgrund von Feedback, dass versehentlich übersprungene Tests schwer zu entdecken und nachzuverfolgen waren. Allerdings unterbrach dies den Workflow vieler Entwickler, die diese Funktion zum Skizzieren geplanter Tests nutzten.
In Jest 24 lösen wir dieses Problem durch die Einführung eines expliziten test.todo (inspiriert vom ausgezeichneten AVA), das separat in der Testzusammenfassung angezeigt wird. Es ermöglicht Ihnen, schnell geplante Tests zu skizzieren, und zukünftig könnte sogar eine ESLint-Regel Sie warnen, wenn Sie vergessen haben, Tests zu implementieren.
test.todo('invalid input should throw');
test.todo('missing options should be normalized');

Verbesserte Assertion-Meldungen
Wenn Tests fehlschlagen, müssen Sie sicher und korrekt entscheiden können, welche Änderungen erwarteter Fortschritt und welche unerwartete Regressionen sind. Es ist besonders wichtig, nicht einige versteckte Regressionen inmitten vieler Fortschritte zu übersehen. Jest 24 macht die Berichte bei fehlgeschlagenen Assertions für mehrere Matcher klarer und prägnanter. Da die Arbeit in Jest 25 fortgesetzt wird, könnten Ihnen vorübergehende Inkonsistenzen auffallen. Wenn Ihre Tests nie fehlschlagen, werden Sie diese Verbesserungen nicht zu sehen bekommen – für den Rest von uns wird es einfacher sein, zu debuggen, warum etwas nicht wie erwartet funktioniert. Vielen Dank für die harte Arbeit von @ittordepam und anderen Mitwirkenden aus der Community.
Sie können diese Änderungen in allen folgenden PRs nachvollziehen: 7621, 7557, 7448, 7325, 7241, 7152, 7125, 7107, 6961.
Beispiele:
Fehlgeschlagene Assertion

Typenkonflikt

Mock-Funktion nicht aufgerufen

Behebung alter Probleme
In diesem Release haben wir einige wirklich alte Probleme behoben.
Das erste, das wir hervorheben möchten, sind fehlende console.log-Ausgaben. Jest fängt alle Logs ab und sammelt sie, um Ihnen einen Stacktrace zu liefern und sie Reportern zur Verfügung zu stellen. Dies führte jedoch zu einem Problem, bei dem sie in bestimmten Randfällen einfach fehlten. Glücklicherweise hat @spion für Jest 24 Abhilfe geschaffen und dieses Problem behoben. Vielen Dank!
Das zweite Problem betrifft Speicherüberläufe, wenn die Differenz zwischen erwarteten und erhaltenen Werten eine große Anzahl von Einfügeänderungen enthält (entweder unerwartet durch Testfehler oder erwartet während testgetriebener Entwicklung). @ittordepam hat den bisherigen Diff-Algorithmus durch das diff-sequences-Paket ersetzt, das durch minimalen Speicherverbrauch dieses Problem behebt. Dies eröffnet die Möglichkeit für Wort-Diffs in Zukunft, ähnlich wie git sie bietet. Bitte sehen Sie sich diesen PR an und zögern Sie nicht, sich zu melden, wenn Sie bei der Umsetzung helfen möchten!
Weitere Highlights
-
Verbesserungen bei
globalSetupundglobalTeardown: Code-Transformation wird nun ähnlich wie beisetupFilesangewendet, und sie werden jetzt als Teil vonprojectsunterstützt. -
Sie können konfigurieren, wo Jest Snapshots gespeichert werden – besonders nützlich, wenn Sie Tools entwickeln, die Jest in größeren Build-Prozessen verwenden.
-
Eine Eigenart der Jest-CLI war bisher, dass einige Flags und Optionen in Camel Case (z.B.
runInBand) geschrieben wurden, andere aber nicht (z.B.no-cache). In Jest 24 werden beide Formate erkannt, sodass ihr CLI-Argumente beliebig schreiben könnt. -
Wir haben
setupTestFrameworkScriptFileinsetupFilesAfterEnvumbenannt und in ein Array umgewandelt. Wir hoffen, dass die Funktion der Option dadurch klarer wird. Für das nächste Major-Release planen wir eine umfassende Überarbeitung der Konfiguration – mehr dazu im folgenden Abschnitt. -
Um den "Magie"-Faktor von Jest zu reduzieren, haben wir in dieser Version die automatische Injektion von
regenerator-runtimeentfernt, das manchmal in kompiliertem Async-Code verwendet wird. Die Einbindung vonregenerator-runtimeist nicht immer notwendig, und wir sind der Meinung, dass es in der Verantwortung der Nutzer liegt, es bei Bedarf hinzuzufügen. Wenn ihr@babel/preset-envmit auf moderne Node-Versionen (z.B. Node 6+) ausgelegtentargetsverwendet, benötigt ihr es nicht. Weitere Informationen findet ihr in unserer Babel-Dokumentation. -
Node.js 10 brachte ein experimentelles Modul namens
worker_threadsmit, das Browser-Worker-Threads ähnelt.jest-worker, Teil der Jest-Plattform, kann nun bei Verfügbarkeitworker_threadsstattchild_processnutzen, was es noch schneller macht! Benchmarks zeigen eine 50%ige Verbesserung. Aufgrund des experimentellen Status ist es nicht aktiviert, wenn Jest als Test Runner läuft, aber ihr könnt es bereits in eigenen Projekten nutzen! Wir planen, es standardmäßig zu aktivieren, sobald es in Node.js den experimentellen Status verlässt.
Breaking Changes
Während alle Breaking Changes im Changelog aufgeführt sind, sind einige besonders erwähnenswert:
-
Wir haben auf Micromatch 3 upgegraded. Dies betrifft zwar nicht alle Nutzer, aber die Glob-Parsing ist strikter als in Version 2 (Jest 23). Lest bei Problemen diesen und verlinkte Issues für Beispiele ungültiger Globs.
-
Wir haben Code-Reste entfernt, die für Node 4 benötigt wurden. Zuvor war es technisch möglich, Jest 23 auf Node 4 zu betreiben – das ist ohne Polyfills und Transpilierung nicht mehr möglich.
-
Änderungen an der Serialisierung von Mock-Funktionen in Snapshots – überprüft eure aktualisierten Snapshots nach dem Upgrade. Verwandtes PR.
-
Jest injiziert
regenerator-runtimenicht mehr automatisch – bei Fehlern konfiguriert Babel korrekt, umasync-Funktionen zu transpilieren (z.B. mit@babel/preset-env). Verwandtes PR.
Die Zukunft
Wir sind zutiefst demütig angesichts der Ergebnisse der State Of JS 2018, bei der Jest den "Highest Satisfaction"-Award gewann. Ein weiterer Meilenstein 2018 war im Oktober, als Jest erstmals über 2 Millionen wöchentliche Downloads verzeichnete. Danke.
Wir sind sehr dankbar für das in uns gesetzte Vertrauen der Community und wollen darauf aufbauen. Wir werden sicherstellen, dass Jest 24 und zukünftige Releases weiter auf diesem Fundament aufbauen und ein integraler Bestandteil der Werkzeugkästen von JavaScript-Entwicklern bleiben.
Dies war das erste Release, bei dem wir die Idee ausprobiert haben, unsere Open-Collective-Finanzierung für Bug-Bounties zu nutzen. Dies hat gut funktioniert, um Nicht-Kern-Entwickler in die Implementierung der neuen Landing Page einzubinden, und wir sind optimistisch bezüglich eines langjährigen Bugs, bei dem Jest-Globals nicht mit Node-Globals übereinstimmen. Wir würden gerne mehr davon machen – wenn du einen Lieblingsbug hast, der sich für unser Bounty-Programm eignet, lass es uns wissen. In der Zwischenzeit findest du alle Tickets mit Bounty über das Issue-Label.
Wir haben bereits mit der Planung für das nächste Release Jest 25 begonnen, wobei das größte geplante Feature eine Überarbeitung unserer Konfiguration ist, die aktuell schwer zu durchschauen ist – hauptsächlich wegen überlappender Optionen und der Vermischung von Glob-Mustern mit regulären Ausdrücken. Feedback dazu, wie eure ideale Jest-Konfiguration aussehen sollte, ist sehr willkommen und kann in diesem Issue eingereicht werden.
Vielleicht hast du auch gehört, dass wir planen, die Codebasis von Flow zu TypeScript zu migrieren. Wir hoffen, dass diese Migration noch mehr Beitragende befähigen wird, mitzuhelfen und 2019 noch besser für JavaScript-Testing zu machen. 🚀 Die Migration soll in einem Minor-Release in naher Zukunft umgesetzt werden. Feedback zu dieser Entscheidung kann im RFC hinzugefügt werden.
Zu guter Letzt: Falls du dich jemals gefragt hast, wie Jest aufgebaut ist, hat @cpojer ein Video mit einem Architekturüberblick aufgenommen, der zeigt, wie Jest unter der Haube funktioniert. Melde dich gerne, wenn du weitere Fragen dazu hast. Das Video ist auf unserer Website verfügbar.
Viel Spaß beim Testen! 🃏
