Integrationstests für JavaScript mit Docker: Vollständiger Leitfaden

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

Integrationstests für JavaScript mit Docker: Von A bis Z

\n\n

In der modernen Webentwicklung ist Codequalität nicht nur eine Metrik, sondern der Schlüssel zur Produktstabilität. Integrationstests nehmen einen zentralen Platz in der Testpyramide ein, da sie die Interaktion zwischen verschiedenen Modulen, Datenbanken, externen APIs und Diensten überprüfen. Die Einrichtung isolierter und reproduzierbarer Umgebungen für solche Tests wird jedoch oft zur Herausforderung. Hier kommt Docker ins Spiel – ein Containerisierungstool, das sich ideal für die Erstellung sauberer, wiederholbarer Testumgebungen eignet.

\n\n

In diesem Artikel zeigen wir, wie Sie Integrationstests für JavaScript (Node.js)-Anwendungen mit Docker organisieren. Sie erfahren, wie Sie eine Testdatenbank hochfahren, Abhängigkeiten in Containern ausführen und effektive Tests schreiben, die sich leicht in eine CI/CD-Pipeline integrieren lassen.

\n\n

1. Warum Docker ideal für Integrationstests ist

\n\n

Der traditionelle Ansatz für Integrationstests erfordert oft die manuelle Einrichtung der Umgebung auf jedem Entwicklerrechner oder CI-Server. Dies führt zum Problem „Auf meinem Rechner funktioniert es“. Docker löst dieses Problem grundlegend:

\n\n
    \n
  • Isolation: Jeder Test wird in einem sauberen Container ausgeführt, wodurch Nebeneffekte vorheriger Läufe ausgeschlossen werden.
  • \n
  • Reproduzierbarkeit: Dieselbe Umgebung (Node.js-Version, Datenbanken, Systembibliotheken) funktioniert garantiert überall: auf dem lokalen Entwicklerrechner, auf dem Build-Server und in der Produktion.
  • \n
  • Abhängigkeitsverwaltung: Sie können komplexe Infrastrukturen (Redis, PostgreSQL, RabbitMQ) problemlos mit einem einzigen Befehl docker-compose up -d hochfahren.
  • \n
  • Geschwindigkeit: Container starten in Sekunden, im Gegensatz zu virtuellen Maschinen. Docker cached Ebenen, was wiederholte Builds beschleunigt.
  • \n
\n\n

Im Kontext von Node.js ermöglicht Docker das „Mocken“ externer Dienste, ohne die Entwicklungsumgebung zu verlassen. Anstatt die Produktions-API aufzurufen, starten Sie einen Testcontainer mit z. B. json-server oder testcontainers.

\n\n

2. Einrichtung des Node.js-Projekts für Tests

\n\n

Angenommen, wir haben eine einfache Express-Anwendung, die Benutzer in PostgreSQL speichert. Unsere Aufgabe ist es, den Endpunkt POST /users zu testen.

\n\n

Projektstruktur:

\n
\nproject/\n├── src/\n│   ├── app.js\n│   ├── db.js\n│   └── routes/\n│       └── users.js\n├── test/\n│   └── integration/\n│       └── users.test.js\n├── docker-compose.test.yml\n├── Dockerfile\n├── package.json\n└── .env.test\n
\n\n

Für die Tests verwenden wir einen gängigen Stack: Mocha (Framework) + Chai (Assertions-Bibliothek) + Supertest (HTTP-Testing).

\n\n

Installieren wir die Abhängigkeiten:

\n
npm install --save-dev mocha chai supertest
\n\n

Die Datei package.json sollte ein Skript zum Ausführen der Tests enthalten:

\n
{\n  "scripts": {\n    "test:integration": "mocha test/integration/**/*.test.js --timeout 10000"\n  }\n}
\n\n

3. Erstellung der Docker-Umgebung für Tests

\n\n

Die Schlüsseldatei ist docker-compose.test.yml. Sie beschreibt die für die Tests erforderlichen Dienste.

\n\n
version: '3.8'\n\nservices:\n  app-test:\n    build:\n      context: .\n      dockerfile: Dockerfile\n    environment:\n      - NODE_ENV=test\n      - DB_HOST=postgres-test\n      - DB_PORT=5432\n      - DB_USER=test_user\n      - DB_PASSWORD=test_pass\n      - DB_NAME=test_db\n    depends_on:\n      postgres-test:\n        condition: service_healthy\n    command: ["npm", "run", "test:integration"]\n\n  postgres-test:\n    image: postgres:15-alpine\n    environment:\n      POSTGRES_USER: test_user\n      POSTGRES_PASSWORD: test_                

Blogs

Buchempfehlungen