Testmodelle mit Jest – Komponententests für EdgeWorkers
Hinweis: Die Schritte in diesem Tutorial können sich im Laufe der Zeit ändern. Auf unserem GitHub finden Sie die aktuellen Anweisungen.
Falls Sie noch nicht mit EdgeWorkers gearbeitet haben: Damit können Sie JavaScript-Code an mehr als 4.200 Standorten ganz in der Nähe Ihrer Nutzer ausführen und kurze Anwendungsreaktionszeiten erzielen.
Da immer mehr Anwendungsfunktionen an die Edge verlagert werden, müssen Sie unbedingt dafür sorgen, dass jede Funktion genau richtig arbeitet. Bei einem Komponententest wird Code über jedes Segment des Programms ausgeführt, wobei Ein- und Ausgabe überprüft werden. Mit diesen Tests können Entwickler einzelne Bereiche eines Programms überprüfen, um zu sehen, wo (und warum) Fehler auftreten. Mehrere Frameworks ermöglichen Ihnen die einfache Ausführung der Tests – darunter gängige Frameworks wie Jest, Mocha, Jasmine und Cypress.
Mit EdgeWorkers können Entwickler Testmodelle an der Edge durchführen, um Folgendes zu erreichen:
Vor der Veröffentlichung auf Akamai feststellen, ob der Code syntaktisch gültig ist und ohne Probleme ausgeführt wird
Überprüfen, ob die Geschäftslogik ordnungsgemäß funktioniert
Änderungen hinter der sicheren Firewall eines Unternehmens testen (ohne Abhängigkeit von einem Remotesystem)
Sicherstellen, dass die Geschäftslogik des Unternehmens funktioniert, unabhängig vom Unternehmenscode oder den JavaScript-Versionsänderungen durch Akamai
In diesem Blog erfahren Sie, wie Sie mit Jest eine Reihe von Komponententests einrichten können, um vor der Bereitstellung von Änderungen zu überprüfen, ob Ihre Geschäftslogik ordnungsgemäß funktioniert, und so das Risiko von Regressionen zu verringern.
Hintergrundwissen
Jest erfordert keine Konfiguration und ist eines der am einfachsten zu erlernenden Frameworks. Äquivalente Pakete sind nicht in npm oder Knoten verfügbar. Daher haben wir Beispielmodelle in Jest erstellt, mit denen Sie JavaScript anhand der EdgeWorkers-API in Node.js testen können. Mit diesen manuellen Testmodellen können Sie deren Funktionen präziser steuern.
Unser EdgeWorkers-Repository bietet eine Reihe von Jest-Testmodellen für die EdgeWorkers-API. In der Ausführungsumgebung von Akamai EdgeWorkers werden Module und Objekte bereitgestellt.
Hinweis: Die Tests werden in Node ausgeführt. Während Node und EdgeWorkers auf V8 ausgeführt werden, sind einige Funktionen für EdgeWorkers explizit deaktiviert, es gibt Ausführungsbeschränkungen für EdgeWorkers (Zeit und Speicher) und Entwickler müssen darauf achten, keine Node-APIs einzubeziehen.
Okay, dann fangen wir jetzt mal an.
Struktur von EdgeWorkers
EdgeWorkers hat die folgende Struktur:
src – Speicherort von main.js und bundle.json. Alle zusätzlichen Module sollten hier abgelegt werden.
test – Komponententests
Tests erstellen und ausführen
1. Schritt: Neues Projekt starten
Führen Sie den folgenden Befehl aus, um ein neues Projekt zu erstellen:
npm init
2. Schritt: Knotenmodule installieren
Hier werden die Installation der erforderlichen Knotenmodule sowie das Setup der Konfigurationsdatei behandelt.
Die Testmodelle für dieses Projekt werden veröffentlicht als das Knotenmodul edgeworkers-jest-mocks. Führen Sie den folgenden Befehl aus, um das Modul zu installieren:
npm install --save-dev edgeworkers-jest-mocks
3. Schritt: package.json einrichten
Stellen Sie sicher, dass die Datei package.json wie folgt konfiguriert ist:
Das Testskript auf Jest festlegen
"scripts": {
"test": "jest"
},
Jest konfigurieren
Jest soll zuerst konfiguriert werden, damit die Testmodelle für die EdgeWorkers-API einfacher importiert werden können.
"jest": {
"testEnvironment": "node",
"transformIgnorePatterns": [
"node_modules/(?!edgeworkers-jest-mocks/__mocks__)"
],
"moduleDirectories": [
"node_modules",
"node_modules/edgeworkers-jest-mocks/__mocks__"
]
}
4. Schritt: babel.config.json einrichten
Babel ist als Abhängigkeit für die neuere Version des in Akamai EdgeWorkers verwendeten ECMAScript enthalten. Um dies richtig zu konfigurieren, fügen Sie einfach die folgenden Informationen als babel.config.json-Datei ein.
Hinweis: Sie müssen eine JSON-Datei erstellen und sie „babel.config.json“ nennen, wenn sie nicht bereits vorhanden ist.
{
"presets": ["@babel/preset-env"],
"plugins": [
["@babel/transform-runtime"]
]
}
5. Schritt: Test schreiben
Nach einem Import von EdgeWorkers oder zugehörigen Funktionen aus der main.js-Datei können Sie alle erforderlichen Tests schreiben. Bei geschriebenen Tests für EdgeWorkers-Ereignis-Handler muss ein Anfrage- oder Antwortmodell erstellt und dann die Ereignis-Handler-Funktion mit diesem Modell aufgerufen werden.
Es folgt ein kurzes Beispiel für einen Test, der in Jest für EdgeWorkers aus src/main.js geschrieben wurde:
import * as edgeworker from "../src/main.js";
import Request from 'request';
describe('Simple Example', () => {
beforeEach(() => {
jest.clearAllMocks();
});
test("functional test against onClientRequest", async () => {
let requestMock = new Request();
edgeworker.onClientRequest(requestMock);
expect(requestMock.respondWith).toHaveBeenCalledTimes(1);
expect(requestMock.respondWith).toHaveBeenCalledWith(200, {}, "<html><body><h1>Test Page</h1></body></html>");
});
test("unit test an edgeworker function", async () => {
let result = edgeworker.someFunction(42);
expect(result != null);
});
});
6. Schritt: Tests ausführen
Die Tests werden über das Jest-Framework bereitgestellt. Führen Sie für die Komponententests folgenden Befehl über die Befehlszeile aus:
npm test
Dadurch werden alle Tests im Testverzeichnis gemäß den Jest-Konventionen ausgeführt.
Weitere Informationen finden Sie in unseren Ressourcen unten. Wir bauen unsere Liste an Entwicklertools und -ressourcen kontinuierlich aus, um Ihnen die Zusammenarbeit mit Akamai zu erleichtern.
Weitere Ressourcen
Wenn Sie Probleme mit diesen Codebeispielen haben, melden Sie diese in GitHub oder chatten Sie mit einem unserer Entwickler auf Slack für EdgeWorkers.