Einführung in Node.js, Folge 15: Integrationstests schreiben

the next big thing  –  0 Kommentare
Anzeige

Unit-Tests überprüfen einzelne Funktionseinheiten isoliert, Integrationstests hingegen prüfen das Zusammenspiel verschiedener Komponenten im Verbund. Allerdings haben sie häufig auch externe Abhängigkeiten, beispielsweise auf das Dateisystem oder das Netzwerk. Wie lassen sich solche Tests in Node.js schreiben?

Man mag darüber diskutieren, was genau unter dem Begriff Unit zu verstehen ist. Eindeutig ist aber, dass es dort im Vergleich zu Integrationstests um das Testen einzelner isolierter Funktionseinheiten geht, bei den Integrationstests jedoch gerade das Zusammenspiel verschiedener Komponenten den Kern der Tests ausmacht.

Anzeige

Bei diesem Zusammenspiel wird häufig auf externe Abhängigkeiten zugegriffen, beispielsweise das Dateisystem oder das Netzwerk, vor allem mit HTTP. Die Frage ist, wie sich entsprechende Tests schreiben lassen, ohne von realen Gegebenheiten abzuhängen. Lassen sich Dateisystem- oder Netzwerkszenarien simulieren?

Tatsächlich ist das möglich. Für das Dateisystem stellt das npm-Modul isolated die gewünschten Funktionen bereit, für das Netzwerk sind supertest und nock hilfreich.

Das Modul isolated legt temporäre Verzeichnisse an und befüllt diese auf Wunsch mit für den Test relevanten Dateien. supertest ermöglicht das Testen von Express-APIs, indem es in die Rolle des Clients schlüpft und diesen simuliert. nock schließlich fängt den ausgehenden Netzwerkverkehr ab und ermöglicht das kontrollierte Senden von HTTP-Antworten.

Natürlich umfasst das Feld der Integrationstests noch viel mehr Szenarien, aber die drei genannten bilden die Basis, mit denen man in fast jedem Projekt in Berührung kommt. Daher ist es gut, die drei Module zu kennen und ihre Funktionsweise und Möglichkeiten zu verstehen.

Wie das alles funktioniert, zeigt das folgende Video:

Einführung in Node.js, Folge 15: Integration-Tests schreiben

tl;dr: Integrationstests benötigen gegebenenfalls die Simulation externer Abhängigkeiten. Das erfüllen die npm-Module isolated, supertest und nock für das Dateisystem beziehungsweise ein- und ausgehenden HTTP-Verkehr.

Anzeige