Testen in JavaScript (Node.js): Frameworks und Werkzeuge

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 (Node.js): Frameworks und Werkzeuge



Testen ist ein wesentlicher Bestandteil der Entwicklung zuverlässiger Software. Im Node.js-Ökosystem gibt es zahlreiche Werkzeuge zur Testautomatisierung, von einfachen Assert-Bibliotheken bis hin zu leistungsstarken Frameworks. In diesem Artikel betrachten wir die wichtigsten Frameworks und Werkzeuge, die Ihnen helfen, qualitativ hochwertige Tests für Node.js-Anwendungen zu schreiben.



Warum ist das Testen von Node.js-Anwendungen wichtig?

Node.js wird häufig für die Serverentwicklung, APIs und Microservices verwendet. Fehler in solchen Systemen können zu kostspieligen Ausfallzeiten oder Datenlecks führen. Automatisierte Tests ermöglichen:

  • Schnelles Auffinden von Regressionen beim Refactoring
  • Dokumentation des Codeverhaltens
  • Stabilität bei der Integration mit Datenbanken und externen Diensten
  • Schnellere Code-Reviews durch überprüfbare Szenarien


Wichtige Testarten in Node.js

  • Unit-Tests — überprüfen einzelne Funktionen oder Module isoliert.
  • Integrationstests — testen das Zusammenspiel mehrerer Module (z. B. mit DB oder API).
  • E2E-Tests — simulieren Benutzeraktionen über den Browser oder HTTP-Anfragen.


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 Asynchronität.

// math.jsfunction add(a, b) {  return a + b;}module.exports = { add };

// math.test.jsconst { add } = require('./math');

test('adds 1 + 2 to equal 3', () => { expect(add(1, 2)).toBe(3);});

Jest unterstützt:

  • Automatische Erkennung von Testdateien (*.test.js)
  • Integrierte Mocks und Spione
  • Codeabdeckung (Coverage) über das Flag --coverage
  • Arbeit mit asynchronem Code über async/await


Mocha + Chai — flexible Klassiker

Mocha ist ein Test-Runner, der eine Struktur für Tests bereitstellt (describe, it). Für Assertions wird üblicherweise die Bibliothek Chai verwendet, die mehrere Stile bietet (assert, expect, should).

const chai = require('chai');const expect = chai.expect;const { add } = require('./math');

describe('Math operations', () => { it('should add two numbers', () => { expect(add(2, 3)).to.equal(5); });});

Mocha wird häufig kombiniert mit:

  • Chai — für lesbare Assertions
  • Sinon — für Mocks, Stubs und Spione
  • Supertest — zum Testen von HTTP-Servern


Sinon — leistungsstarke Mocks und Spione

Sinon.JS ist eine Bibliothek zur Erstellung von Test-Doubles. Sie ermöglicht es, den zu testenden Code von externen Abhängigkeiten zu isolieren.

const sinon = require('sinon');const { expect } = require('chai');

const userService = { getUser: (id) => { /* externer Aufruf */ }};

describe('User controller', () => { it('should call getUser with correct id', () => { const spy = sinon.spy(userService, 'getUser'); userService.getUser(123); expect(spy.calledWith(123)).to.be.true; spy.restore(); });});


Supertest — Testen von HTTP-Servern

Supertest ermöglicht das Testen von Express/Koa-Servern, ohne sie auf einem echten Port zu starten. Es emuliert HTTP-Anfragen und überprüft die Antworten.

const request = require('supertest');const express = require('express');

const app = express();app.get('/hello', (req, res) => { res.status(200).json({ message: 'Hello World' });});

describe('GET /hello', () => { it('responds with json', (done) => { request(app) .get('/hello') .expect('Content-Type', /j

Empfehlungen