Diese Woche wurde ich damit beauftragt, Tests zu meinem RefactorCode-Projekt hinzuzufügen. Als ich anfing, neue Funktionen hinzuzufügen, bemerkte ich, dass einige vorhandene Funktionen nicht mehr funktionierten und es immer schwieriger wurde, alles manuell zu testen. Dies machte deutlich, dass ich ordnungsgemäße automatisierte Tests implementieren musste, um sicherzustellen, dass die Anwendung stabil ist.
Da ich bereits Erfahrung mit Jest aus meinem vorherigen Kurs „Cloud Computing für Programmierer“ hatte, in dem ich mit Node.js gearbeitet habe, habe ich beschlossen, es auch für dieses Projekt zu verwenden. Ich begann damit, einige Tests zu schreiben, um die Funktionalität meines Codes zu überprüfen. Allerdings bin ich auf ein paar Fehler gestoßen, mit denen ich vorher noch nicht konfrontiert war. Nach einigem Debuggen und Durchsuchen von Stack Overflow wurde mir klar, dass bei der Verwendung von ESM (ECMAScript-Modulen) mit Jest zusätzliche Konfigurationen erforderlich sind. In meinem vorherigen Projekt hatte ich CommonJS verwendet, was perfekt funktionierte. Während ich mich für die Konvertierung für Babel hätte entscheiden können, bot Jest eine neue Beta-Funktion an, mit der ESM direkt ausgeführt werden konnte. Ich habe beschlossen, es auszuprobieren, und es hat großartig funktioniert!
Hier wird alles erklärt, was mit der Konfiguration von Jest mit ESM zu tun hat: https://jestjs.io/docs/ecmascript-modules
Hier ein kurzer Überblick über die Einrichtung:
Jest installieren:
npm install --save-dev jest
Erstellen Sie eine jest.config.js-Datei. Hier stelle ich auch ein, welche Ordner ignoriert werden sollen:
export default { testPathIgnorePatterns: ["/node_modules/", "/examples"], transform: {}, };
Verwenden Sie im Abschnitt „package.json-Skripte“ das experimentelle Argument, damit jest mit ESM-Modulen funktioniert:
"scripts": { "test": "node --experimental-vm-modules node_modules/jest/bin/jest.js" }
Erstellen Sie eine Testdatei. Ich habe alle Tests in einem Testordner im Stammverzeichnis erstellt. Hier ist ein einfaches, das ich erstellt habe:
import { readFile, checkIfDirectory } from "../src/fileUtils"; describe("File Utility", () => { test("Read File", () => { readFile("./examples/test.txt").then((data) => { expect(data).toBe("Hello World"); }); }); test('should return true if the path is a directory', async () => { const result = await checkIfDirectory('./examples'); expect(result).toBe(true); }); });
Wenn Sie mit einer einzelnen Testdatei testen möchten:
npm test -- banner.test.js
Um alle Tests auszuführen, verwenden wir das Skript, das wir zuvor in package.json hinzugefügt haben:
npm run test
Endlich wurden die Grundtests aufgebaut. Dies war jedoch erst der Anfang meiner Reise zur Fehlerbehebung. Ich hatte auch Schwierigkeiten damit, Bibliotheken und Module zu verspotten, insbesondere da sie ESM verwendeten. Diese erforderten eine zusätzliche Konfiguration, aber nach einigen Optimierungen konnte ich alles zum Laufen bringen und die Tests liefen erfolgreich.
Anstatt das reguläre jest.mock zu verwenden, müssen Sie jest.unstable_mockModule:
verwenden
For example: await jest.unstable_mockModule("fs", () => ({ existsSync: jest.fn(), readFileSync: jest.fn(), }));
Weitere Informationen finden Sie in diesem Abschnitt.
Eine der Kernfunktionen, die ich testen wollte, war die Integration mit der Gemini-API. Da ich mich zum Testen nicht auf die Live-API verlassen wollte, habe ich beschlossen, die API-Aufrufe zu simulieren. Anfangs habe ich versucht, Nock zu verwenden, aber es gab Probleme, weil es mit der Standard-Abrufimplementierung von Node nicht gut funktionierte. Es schien, dass die Gemini-Bibliothek den Standardabruf anstelle einer Abrufimplementierung eines Drittanbieters verwendete, was dazu führte, dass der Mock fehlschlug. Nach mehreren erfolglosen Versuchen wechselte ich zu einer anderen Bibliothek namens MSW (Mock Service Worker). Obwohl die Erstellung eines Scheinservers etwas mehr Setup erforderte, funktionierte es beim ersten Versuch einwandfrei. Ich habe eine Beispielantwort basierend auf der Reaktion der Gemini-API erstellt, die es mir ermöglichte, die überarbeitete Funktionalität zu testen.
So wurde der Mock-Server als Referenz eingerichtet:
npm install --save-dev jest
Sie können sehen, dass ich einen bestimmten API-Endpunkt verspotte, den ich für die Anwendung verwende. Jetzt müssen Sie nur noch Folgendes hinzufügen, um den Server während des Tests zu starten:
export default { testPathIgnorePatterns: ["/node_modules/", "/examples"], transform: {}, };
Wenn ich über den Prozess nachdenke, war dies eine großartige Lernerfahrung für mich. Im Nachhinein hätte ich wahrscheinlich vorher die Kompatibilität der von mir verwendeten Bibliotheken überprüfen und mögliche Probleme berücksichtigen sollen. Trotz der Herausforderungen bin ich froh, einen Punkt erreicht zu haben, an dem meine Tests reibungslos verlaufen. Ich freue mich darauf, in Zukunft weitere Tests hinzuzufügen und die Gesamtstabilität meines Projekts zu verbessern.
Das obige ist der detaillierte Inhalt vonTestprobleme mit Jest und ESM und wie man sie behebt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!