Testen in JavaScript (Node.js): Frameworks und Werkzeuge
Qualitätssicherung durch Tests ist ein wesentlicher Bestandteil der Node.js-Entwicklung. Sie ermöglicht es, Fehler frühzeitig zu erkennen, vereinfacht Refactoring und erhöht die Zuverlässigkeit von Anwendungen. Im JavaScript-Ökosystem gibt es zahlreiche Frameworks und Hilfsprogramme für das Testen. In diesem Artikel betrachten wir die wichtigsten Werkzeuge, ihre Möglichkeiten und geben praktische Beispiele.
1. Grundlegende Testarten
Bevor Sie ein Werkzeug auswählen, ist es wichtig zu verstehen, welche Testarten Sie schreiben werden:
- Modultests (Unit-Tests) — prüfen einzelne Funktionen oder Module isoliert.
- Integrationstests — prüfen die Interaktion zwischen mehreren Modulen, einer Datenbank oder externen APIs.
- End-to-End (E2E) Tests — simulieren Benutzeraktionen im Browser oder in der gesamten Anwendung.
2. Jest — universelles Framework von Facebook
Jest ist das beliebteste Framework zum Testen von JavaScript. Es enthält alles Notwendige: Test-Runner, Assertions-Bibliothek, Mocks und integrierte Unterstützung für Codeabdeckung.
Installation:
npm install --save-dev jestBeispiel eines einfachen Unit-Tests für eine Additionsfunktion:
// sum.jsfunction sum(a, b) { return a + b;}module.exports = sum;
// sum.test.jsconst sum = require('./sum');
test('Addition 1 + 2 ergibt 3', () => { expect(sum(1, 2)).toBe(3);});Tests ausführen:
npx jestVorteile von Jest:
- Null-Konfiguration für React- und Node-Projekte.
- Automatischer Start im Watch-Modus.
- Integrierte Mocks und Spione.
- Unterstützung für asynchronen Code (async/await, Callbacks).
3. Mocha + Chai — flexible Kombination
Mocha ist ein flexibler Test-Runner, der keine Assertions-Bibliothek vorschreibt. Meistens wird er zusammen mit Chai verwendet — einer Bibliothek mit verständlicher Syntax (should, expect, assert).
Installation:
npm install --save-dev mocha chaiBeispiel eines Tests mit Chai:
// calculator.jsfunction divide(a, b) { if (b === 0) throw new Error('Division durch Null'); return a / b;}module.exports = { divide };
// test.jsconst { expect } = require('chai');const { divide } = require('./calculator');
describe('Taschenrechner', function() { it('sollte zwei Zahlen dividieren', function() { expect(divide(10, 2)).to.equal(5); });
it('sollte einen Fehler werfen bei Division durch Null', function() { expect(() => divide(10, 0)).to.throw('Division durch Null'); });});Ausführung:
npx mocha test.jsMocha ist besonders nützlich, wenn eine feine Abstimmung der Berichte und Integration mit anderen Werkzeugen erforderlich ist.
4. Supertest — Testen von HTTP-Servern
Supertest ist eine Bibliothek für Integrationstests von Express- (und anderen) Servern. Sie ermöglicht das Senden von HTTP-Anfragen und das Überprüfen der Antworten.
Installation:
npm install --save-dev supertestBeispiel eines Tests für eine Express-Anwendung:
// app.jsconst express = require('express');const app = express();app.get('/hello', (req, res) => res.json({ message: 'Hallo Welt' }));module.exports = app;
// app.test.jsconst request = require('supertest');const app = require('./app');
describe('GET /hello', function() { it('antwortet mit json', function(done) { request(app) .get('/hello') .expect('Content-Type', /json/) .expect(200) .then(response => { expect(response.body.message).toBe('Hallo Welt'); done(); }); });});Supertest lässt sich hervorragend mit Jest oder Mocha kombinieren.
Auch in der Bibliothek
Logging für JavaScript (Node.js): Die besten Lösungen und Bibliotheken
doctest für C++: Vollständiges Tutorial mit Beispielen
Scrutor für C# (.NET): Vollständige Anleitung mit Beispielen
Arbeiten mit XML in Go (Golang): Paket encoding/xml und Alternativen