Testen in JavaScript: Unit, Integration, E2E mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Testen in JavaScript: Unit, Integration, E2E — Vollständiger Leitfaden



Codequalität ist der Schlüssel zum Erfolg jedes Projekts. In der Welt von JavaScript (insbesondere Node.js) ist Testen nicht nur eine gute Praxis, sondern eine Notwendigkeit geworden. Wir analysieren drei Schlüsselebenen: Modultests (Unit), Integrationstests (Integration) und End-to-End-Tests (E2E). Sie erfahren, wie sie sich unterscheiden, wann Sie welchen Typ anwenden und sehen funktionierende Beispiele mit gängigen Tools.



1. Unit-Testing: Isolierte Module prüfen



Unit-Tests überprüfen die Arbeit einzelner Funktionen, Klassen oder Module in Isolation von externen Abhängigkeiten (Datenbanken, APIs, Dateisystem). Dies ist die schnellste und zuverlässigste Ebene.



Tools und Einrichtung

Das beliebteste Framework ist Jest. Installation:

npm install --save-dev jest

Fügen Sie das Skript in package.json hinzu:

"scripts": {  "test": "jest"}


Beispiel: Testen einer Rabattfunktion

Erstellen wir die Datei discount.js:

// discount.jsfunction applyDiscount(price, discountPercent) {  if (price <= 0) throw new Error('Price must be positive');  if (discountPercent < 0 || discountPercent > 100) throw new Error('Invalid discount');  return price - (price * discountPercent) / 100;}module.exports = { applyDiscount };


Jetzt schreiben wir einen Unit-Test in discount.test.js:

const { applyDiscount } = require('./discount');

describe('applyDiscount', () => { test('calculates 10% discount correctly', () => { expect(applyDiscount(100, 10)).toBe(90); });

test('throws error for negative price', () => { expect(() => applyDiscount(-10, 10)).toThrow('Price must be positive'); });

test('throws error for invalid discount percent', () => { expect(() => applyDiscount(100, 150)).toThrow('Invalid discount'); });});


Ausführung: npm test. Jest findet automatisch Dateien mit *.test.js.



Tipp: Verwenden Sie mock-Objekte zur Isolation von externen Diensten.



// Beispiel für einen Mock einer externen APIjest.mock('./api');const api = require('./api');api.getData.mockResolvedValue({ id: 1 });


2. Integrationstests: Zusammenspiel der Komponenten prüfen



Integrationstests überprüfen, wie verschiedene Module zusammenarbeiten: Datenbank + Geschäftslogik + HTTP-Routen. Sie sind langsamer als Unit-Tests, geben aber mehr Vertrauen in die Korrektheit des Systems.



Tools: Supertest + Jest

Supertest ermöglicht HTTP-Anfragen an Ihre Express-Anwendung, ohne den Server tatsächlich zu starten.

npm install --save-dev supertest


Beispiel: Testen einer REST-API

Angenommen, es gibt eine einfache Express-Anwendung app.js:

const express = require('express');const app = express();app.use(express.json());

app.post('/users', (req, res) => { const { name, email } = req.body; if (!name || !email) { return res.status(400).json({ error: 'Missing fields' }); } // In DB speichern (vereinfacht) res.status(201).json({ id: 1, name, email });});

module.exports = app;


Integrationstest users.test.js:

const request = require('supertest');const app = require('./app');

describe('POST /users', () => { test('creates user with valid data', async () => { const response = await request(app) .post('/users') .send({ name: 'Alice', email: 'alice@test.com' }); expect(response.status).toBe(201); expect(response.body).toHaveProperty('id'); expect(response.body.name).toBe('Alice'); });

test('returns 400 for missing email', async () => { const response = await request(app) .post('/users') .send({ name: 'Bob' });

Blogs

Buchempfehlungen