Zum Hauptinhalt springen

Jest 11.0

· 5 Minuten Lesezeit
Inoffizielle Beta-Übersetzung

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

Heute kündigen wir den Wechsel zu Major-Versionen für Jest an, wobei Jest 11.0 das erste Major-Release darstellt. Jest wird seit Jahren von Facebook-Ingenieuren und in unseren Continuous-Integration-Systemen eingesetzt. Wir sind überzeugt, dass Jest schon lange über ein "1.0-Release" hinausgewachsen ist. Dieser Schritt ähnelt einer Änderung, die das React-Team vorgenommen hat.

Für Nutzer von Jest 0.9 oder Jest 0.10 sollte das Upgrade nahtlos verlaufen. Alle Änderungen der letzten Monate wurden in Jest 11.0 integriert.

Neu in Jest 11.0

Babel-Integration und vereinfachte Einrichtung

babel-jest wurde in das neu modularisierte Jest-Repository integriert und arbeitet nun nahtlos mit Jest zusammen. Wenn Sie von einer älteren Jest-Version upgraden oder Jest neu einführen möchten, empfehlen wir den Leitfaden Erste Schritte.

Bisher bot Jest APIs wie jest.dontMock an, die ein Modul entmocken, das anschließend per require-Funktion geladen wird. Testcode sah typischerweise so aus:

jest.dontMock('LikeButton');
const LikeButton = require('LikeButton'); // LikeButton is unmocked

Mit ES2015-Import-Anweisungen funktioniert dieser Ansatz jedoch nicht mehr. Gemäß Spezifikation werden import-Anweisungen an den Anfang des Codeblocks verschoben. Code wie dieser:

jest.dontMock('LikeButton');
import LikeButton from 'LikeButton';

würde bei der Ausführung tatsächlich in dieser Reihenfolge verarbeitet:

import LikeButton from 'LikeButton'; // This happens before the dontMock call.
jest.dontMock('LikeButton');

Das LikeButton-Modul würde somit gemockt werden, obwohl wir explizit dontMock aufrufen.

Bei gemeinsamer Verwendung der neuesten Jest- und babel-jest-Versionen werden Aufrufe der neuen APIs jest.unmock, jest.mock, jest.disableAutomock und jest.enableAutomock an den Anfang des Blocks vor ES2015-Import-Anweisungen verschoben.

jest.unmock('LikeButton');
import LikeButton from 'LikeButton'; // LikeButton is properly unmocked!

Verbesserungen beim (Auto)Mocking

Wir haben zahlreiche Verbesserungen und Fehlerbehebungen an Jests Auto-Mocking-Funktion vorgenommen, die npm3-Unterstützung optimiert und neue manuelle Mocking-APIs hinzugefügt. Viele Nutzer wünschten sich, Jest mit deaktivierter Auto-Mocking-Funktion zu verwenden. Daher wurde die globale Konfigurationsoption automock hinzugefügt, die auf false gesetzt werden kann.

Zusätzlich haben wir zwei neue APIs eingeführt, um manuelle Mocks zu vereinfachen. jest.mock definiert eine manuelle Mock-Factory für einen spezifischen Test:

// Implement a mock for a hypothetical "sum" module.
jest.mock('sum', () => {
return (a, b) => a + b;
});

const sum = require('sum');
sum(1, 4); // 5

Und jest.fn wurde hinzugefügt, um das Erstellen von Mock-Funktionen zu erleichtern:

// Create a mock function
const mockFn = jest.fn(() => 42);
mockFn(); // 42
expect(mockFn.calls.length).toBe(1);

Leistung

Kürzlich berichteten wir über Leistungsverbesserungen in Jest. Besonders die Startzeit wurde optimiert, und wir befinden uns nun in einer komfortablen Leistungsposition.

Verbesserungen bei Jasmine und Test-Assertions

Bei der Open-Source-Freigabe lieferte Jest Jasmine 1 aus. Jest wurde jedoch für die Arbeit mit beliebigen Test-Assertion-Bibliotheken konzipiert. Die optionale Jasmine 2-Unterstützung wurde Ende letzten Jahres durch einen externen Beitrag hinzugefügt. Dieser Wechsel bietet bessere Leistung und APIs gegenüber der vorherigen Jasmine-Version. Daher haben wir alle JavaScript-Tests bei Facebook auf Jasmine 2 migriert. Mit Jest 11 wird Jasmine 2 zum neuen Standard. Jasmine 1 kann über die Konfigurationsoption testRunner aktiviert werden.

Wir haben zudem zahlreiche Jasmine-bezogene Updates umgesetzt. Die Fehlermeldungen für benutzerdefinierte Matcher von Jest-Mockfunktionen wurden verbessert und funktionieren nun auch mit Jasmine-Spies. Übersprungene Tests bei Verwendung von fit oder fdescribe, werden nun korrekt am Ende eines Testlaufs protokolliert.

Weitere Änderungen

Der Befehl jest --watch wurde überarbeitet und verbessert. Standardmäßig werden jetzt nur Tests ausgeführt, die mit geänderten Dateien zusammenhängen. Wenn Sie bei jeder Änderung alle Tests ausführen möchten, können Sie jest --watch=all verwenden. Die ausführliche Protokollausgabe wurde ebenfalls verbessert und wir haben hilfreichere Warnungen und Fehlermeldungen hinzugefügt. Wir haben eine Konfigurationsoption testEnvironment hinzugefügt, um die Testumgebung anzupassen. Beispielsweise kann beim Erstellen eines Node-Services eine spezielle node-Umgebung statt jsdom verwendet werden. Schließlich wurden die Website und die gesamte Dokumentation komplett neu geschrieben.

Alle Änderungen der letzten Monate finden Sie im CHANGELOG.

Beiträge und die Zukunft von Jest

In den letzten sechs Monaten hat Jest bedeutende Beiträge von einer großen Anzahl neuer Mitwirkender erhalten. Ich möchte allen Open-Source-Mitwirkenden und Facebook-Mitarbeitern für ihre Hilfe danken, Jest für alle besser zu machen. Neue Mitwirkende: Alexander Juarez, Christian Lentfort, Cristian Carlesso, Dan Abramov, Dmitrii Abramov, Evan Jacobs, James Friend, James Ide, Jeff Carpenter, Joe Lencioni, Michael Diolosa, Nik Graf, Pavel Prokopenko, Pavel Volokitin, Sebastian Mayr und ShihChi Huang.

Mit Ihrer Unterstützung freuen wir uns darauf, Jest in den kommenden Monaten noch besser zu machen. Wir arbeiten derzeit an verbessertem React (Native)-Testing, erweiterter Code-Coverage-Unterstützung und planen, unseren internen Test-Runner zu open-sourcen, der das Ausführen mehrerer Jest-Projekte mit einem einzigen Run-Kommando ermöglicht.