Jest mit Next.js einrichten
Jest und React Testing Library werden häufig zusammen für Unit-Tests und Snapshot-Tests verwendet. Diese Anleitung zeigt Ihnen, wie Sie Jest mit Next.js einrichten und Ihre ersten Tests schreiben.
Hinweis: Da
async
Server-Komponenten neu im React-Ökosystem sind, unterstützt Jest diese derzeit nicht. Während Sie weiterhin Unit-Tests für synchrone Server- und Client-Komponenten ausführen können, empfehlen wir E2E-Tests fürasync
-Komponenten.
Schnellstart
Sie können create-next-app
mit dem Next.js with-jest Beispiel verwenden, um schnell zu beginnen:
Manuelle Einrichtung
Seit der Veröffentlichung von Next.js 12 verfügt Next.js über eine integrierte Konfiguration für Jest.
Um Jest einzurichten, installieren Sie jest
und die folgenden Pakete als Entwicklungsabhängigkeiten:
Generieren Sie eine grundlegende Jest-Konfigurationsdatei, indem Sie den folgenden Befehl ausführen:
Dies führt Sie durch eine Reihe von Eingabeaufforderungen zur Einrichtung von Jest für Ihr Projekt, einschließlich automatischer Erstellung einer jest.config.ts|js
-Datei.
Aktualisieren Sie Ihre Konfigurationsdatei für die Verwendung von next/jest
. Dieser Transformer enthält alle notwendigen Konfigurationsoptionen, damit Jest mit Next.js funktioniert:
Im Hintergrund konfiguriert next/jest
Jest automatisch, einschließlich:
- Einrichten von
transform
mit dem Next.js Compiler - Automatisches Mocken von Stylesheets (
.css
,.module.css
und deren scss-Varianten), Bildimporten undnext/font
- Laden von
.env
(und allen Varianten) inprocess.env
- Ignorieren von
node_modules
bei Test-Auflösung und -Transformationen - Ignorieren von
.next
bei Test-Auflösung - Laden von
next.config.js
für Flags, die SWC-Transformationen aktivieren
Hinweis: Um Umgebungsvariablen direkt zu testen, laden Sie diese manuell in einem separaten Setup-Skript oder in Ihrer
jest.config.ts
-Datei. Weitere Informationen finden Sie unter Test-Umgebungsvariablen.
Jest-Einrichtung (mit Babel)
Wenn Sie den Next.js Compiler deaktivieren und stattdessen Babel verwenden, müssen Sie Jest manuell konfigurieren und zusätzlich zu den oben genannten Paketen babel-jest
und identity-obj-proxy
installieren.
Hier sind die empfohlenen Optionen zur Konfiguration von Jest für Next.js:
Sie können mehr über jede Konfigurationsoption in der Jest-Dokumentation erfahren. Wir empfehlen auch, die next/jest
-Konfiguration zu überprüfen, um zu sehen, wie Next.js Jest konfiguriert.
Stylesheets und Bildimporte behandeln
Stylesheets und Bilder werden in Tests nicht verwendet, aber ihr Import kann Fehler verursachen, daher müssen sie gemockt werden.
Erstellen Sie die in der Konfiguration genannten Mock-Dateien - fileMock.js
und styleMock.js
- in einem __mocks__
-Verzeichnis:
Weitere Informationen zum Umgang mit statischen Assets finden Sie in der Jest-Dokumentation.
Schriftarten behandeln
Um Schriftarten zu behandeln, erstellen Sie die Datei nextFontMock.js
im __mocks__
-Verzeichnis und fügen Sie die folgende Konfiguration hinzu:
Optional: Absolute Importe und Modul-Pfadalias behandeln
Wenn Ihr Projekt Modul-Pfadalias verwendet, müssen Sie Jest so konfigurieren, dass die Importe aufgelöst werden, indem Sie die Pfadoption in der jsconfig.json
-Datei mit der moduleNameMapper
-Option in der jest.config.js
-Datei abgleichen. Beispiel:
Optional: Jest mit benutzerdefinierten Matchern erweitern
@testing-library/jest-dom
enthält einen Satz praktischer benutzerdefinierter Matcher wie .toBeInTheDocument()
, die das Schreiben von Tests vereinfachen. Sie können die benutzerdefinierten Matcher für jeden Test importieren, indem Sie die folgende Option zur Jest-Konfigurationsdatei hinzufügen:
Fügen Sie dann in jest.setup.ts
den folgenden Import hinzu:
Hinweis:
extend-expect
wurde inv6.0
entfernt. Wenn Sie@testing-library/jest-dom
vor Version 6 verwenden, müssen Sie stattdessen@testing-library/jest-dom/extend-expect
importieren.
Wenn Sie weitere Setup-Optionen vor jedem Test hinzufügen müssen, können Sie diese zur obigen jest.setup.js
-Datei hinzufügen.
Ein Test-Skript zu package.json
hinzufügen:
Fügen Sie schließlich ein Jest-test
-Skript zu Ihrer package.json
-Datei hinzu:
jest --watch
führt Tests erneut aus, wenn eine Datei geändert wird. Weitere Jest-CLI-Optionen finden Sie in der Jest-Dokumentation.
Ihren ersten Test erstellen:
Ihr Projekt ist jetzt bereit, Tests auszuführen. Erstellen Sie einen Ordner namens __tests__
im Stammverzeichnis Ihres Projekts.
Zum Beispiel können wir einen Test hinzufügen, um zu überprüfen, ob die <Home />
-Komponente erfolgreich eine Überschrift rendert:
Optional können Sie einen Snapshot-Test hinzufügen, um unerwartete Änderungen in Ihrer Komponente zu verfolgen:
Hinweis: Testdateien sollten nicht im Pages Router enthalten sein, da alle Dateien im Pages Router als Routen betrachtet werden.
Tests ausführen
Führen Sie dann den folgenden Befehl aus, um Ihre Tests auszuführen:
Zusätzliche Ressourcen
Für weitere Informationen können diese Ressourcen hilfreich sein:
- Next.js mit Jest-Beispiel
- Jest-Dokumentation
- React Testing Library-Dokumentation
- Testing Playground - Verwenden Sie bewährte Testpraktiken, um Elemente zu finden.