JavaScript-Tests: Unit, Integration, E2E von A bis Z

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

JavaScript-Tests: Von Modultests bis zu End-to-End-Tests

\n\n

Qualitätssicherung durch Tests ist ein wesentlicher Bestandteil professioneller JavaScript-Entwicklung. In diesem Artikel behandeln wir die drei wichtigsten Testebenen: Modultests (Unit), Integrationstests (Integration) und End-to-End-Tests (E2E). Sie erfahren, welche Tools Sie verwenden sollten, wie Sie Tests in Node.js schreiben und wie Sie eine effektive Teststrategie aufbauen.

\n\n

1. Unit-Testing: Die Basis der Testpyramide

\n\n

Unit-Tests prüfen isolierte Module – Funktionen, Klassen oder einzelne Methoden. Die Hauptregel: Der getestete Code darf nicht von externen Ressourcen (Datenbanken, APIs, Dateisystem) abhängen.

\n\n

Tools für Unit-Tests

\n
    \n
  • Jest – Das beliebteste Framework von Facebook. Es bietet von Haus aus Mocks, Snapshots und Codeabdeckung.
  • \n
  • Mocha + Chai – Eine flexible Kombination für alle, die alles manuell konfigurieren möchten.
  • \n
  • Vitest – Eine moderne Alternative zu Jest, optimiert für Vite-Projekte.
  • \n
\n\n
// Beispiel eines Unit-Tests mit Jest\nconst { calculateDiscount } = require('./pricing');\n\ndescribe('calculateDiscount', () => {\n  test('gibt 10% Rabatt für Beträge > 1000 zurück', () => {\n    const result = calculateDiscount(1500);\n    expect(result).toBe(1350);\n  });\n\n  test('wendet keinen Rabatt für Beträge <= 1000 an', () => {\n    const result = calculateDiscount(500);\n    expect(result).toBe(500);\n  });\n\n  test('behandelt den Grenzwert 1000 korrekt', () => {\n    const result = calculateDiscount(1000);\n    expect(result).toBe(1000);\n  });\n});
\n\n

Best Practices für Unit-Tests

\n
    \n
  • Testen Sie jeweils ein Verhalten (ein Assert pro Test).
  • \n
  • Verwenden Sie aussagekräftige Testnamen (given/when/then).
  • \n
  • Vermeiden Sie das Testen privater Methoden – testen Sie die öffentliche Schnittstelle.
  • \n
  • Halten Sie die Codeabdeckung bei 70-80%.
  • \n
\n\n

2. Integrationstests: Überprüfung der Komponenteninteraktion

\n\n

Integrationstests prüfen, wie verschiedene Module zusammenarbeiten. Im Kontext von Node.js bedeutet dies in der Regel Tests mit einer echten Datenbank, einem Dateisystem oder externen APIs.

\n\n

Typische Szenarien für Integrationstests

\n
    \n
  • Interaktion des Controllers mit der Service-Schicht und der Datenbank.
  • \n
  • Überprüfung von Middleware und Routen in Express/Koa.
  • \n
  • Testen von Repositories mit einer Testdatenbank (SQLite im Speicher oder PostgreSQL in Docker).
  • \n
\n\n
// Beispiel eines Integrationstests mit Supertest und Jest\nconst request = require('supertest');\nconst app = require('../app');\nconst { createTestUser, cleanDatabase } = require('./helpers');\n\nbeforeEach(async () => {\n  await cleanDatabase();\n});\n\ndescribe('POST /api/users', () => {\n  test('erstellt einen Benutzer und gibt 201 zurück', async () => {\n    const response = await request(app)\n      .post('/api/users')\n      .send({ name: 'Ivan', email: 'ivan@test.com' });\n\n    expect(response.status).toBe(201);\n    expect(response.body).toHaveProperty('id');\n    expect(response.body.name).toBe('Ivan');\n  });\n\n  test('gibt 400 bei doppelter E-Mail zurück', async () => {\n    await createTestUser({ email: 'ivan@test.com' });\n\n    const response = await request(app)\n      .post('/api/users')\n      .send({ name: 'Petr', email: 'ivan@test.com' });\n\n    expect(response.status).toBe(400);\n    expect(response.body.error).toBe('E-Mail wird bereits verwendet');\n  });\n});
\n\n

Einrichtung der Testinfrastruktur

\n
    \n
  • Docker Compose – zum Starten von Testdiensten (DB, Redis).
  • \n
  • Testcontainers – programmgesteuerte Verwaltung von Containern aus Tests heraus.
  • \n
  • In-Memory-Datenbanken (z. B. mongodb-memory-server) – für schnelle Tests ohne externe Abhängigkeiten.
  • \n
\n\n

3. E2E-Testing: Überprüfung des gesamten Systems

Blogs

Buchempfehlungen