Unit-Tests mit Node.js

Der konsequente Einsatz von Unit-Tests ist ein grundlegendes Qualitätsmerkmal zeitgemäßer Softwareentwicklung. Für Node.js existiert mit Mocha ein Framework zum Schreiben und Ausführen solcher Tests.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 16 Min.
Von
  • Golo Roden
Inhaltsverzeichnis

Der konsequente Einsatz von Unit-Tests ist ein grundlegendes Qualitätsmerkmal zeitgemäßer Softwareentwicklung. Das gilt ebenfalls unter Node.js. TJ Holowaychuk stellt mit Mocha ein Framework zum Schreiben und Ausführen von Unit-Tests zur Verfügung, dessen größte Stärke im Testen asynchronen Codes besteht. Außerdem lässt es sich im Webbrowser ausführen.

In gewissem Sinne enthält Node.js bereits von Haus aus all jene Hilfsmittel, die man zum Schreiben von Unit-Tests benötigt. Während die ersten beiden Phasen des AAA-Patterns, Act und Arrange, keine besonderen Anforderungen stellen, verlangt die dritte Phase, Assert, häufig nach einem Modul, das dieses namensgebende Konstrukt bereitstellt. In Node.js geschieht das durch das integrierte assert-Modul.

Obwohl es auf den ersten Blick ausgesprochen hilfreich erscheint, ist das Modul ohne ergänzende Hilfsmittel tatsächlich kaum alltagstauglich. Es bietet kaum mehr als die Prüfung auf Gleich- beziehungsweise Ungleichheit zweier Werte und Untersuchungen zum Auffinden von Ausnahmen. Darüber hinaus fehlt ein weiteres Hilfsmittel zum Ausführen von Unit-Tests gänzlich: Node.js enthält keinen Testrunner.

An dieser Stelle kommt das Modul Mocha ins Spiel. Es ist ein einfach gehaltenes, zugleich jedoch leistungsfähiges Framework für Node.js und den Webbrowser, dessen besondere Stärke im Testen asynchronen Codes besteht.

Die Installation von Mocha erfolgt auf dem für Node.js üblichen Weg durch den Node Package Manager (npm). Sie erfolgt üblicherweise global, da eine individuelle, anwendungsbezogene Instanz in der Regel überflüssig ist:

$ sudo npm install -g mocha

Danach lässt sich Mocha durch die Eingabe des gleichnamigen Kommandos im Rahmen jeder beliebigen Anwendung aufrufen:

$ mocha

Dabei gilt es jedoch, die Konvention zu beachten, dass Mocha ohne explizite Angabe von Testdateien nach einem Verzeichnis namens test innerhalb des aktuellen Verzeichnisses sucht und alle darin enthaltenen Dateien der Reihe nach ausführt. Dabei berücksichtigt es jedoch nicht darin enthaltene Unterverzeichnisse, sondern ausschließlich die oberste Ebene.

Es ist also durchaus sinnvoll, einer Anwendung ein entsprechendes test-Verzeichnis hinzuzufügen. Beim Aufruf muss man jedoch zwingend darauf achten, dass man sich in dem Verzeichnis befindet, das dem test-Verzeichnis übergeordnet ist. Einen Aufruf aus einem anderen Verzeichnis quittiert Mocha standardmäßig mit der anfangs durchaus verwirrenden Fehlermeldung, dass die Datei test.js nicht gefunden worden sei.

Selbstverständlich kann der Aufruf von Mocha in der Datei package.json hinterlegt werden, sodass sich die Tests alternativ auch mit dem Kommando

$ npm test 

ausführen lassen. Dazu ist dieser Datei der folgende, fett hervorgehobene Codeblock hinzuzufügen:

{
[...],
'scripts': {
'test': 'mocha'
},
[...]
}

Mocha verfügt über eine Reihe von Kommandozeilenparametern, die sich mit dem Parameter --help auflisten lassen. Um regelmäßig verwendete Parameter nicht stets von Hand eingeben zu müssen, kann man sie als Standardwerte in einer Datei namens mocha.opts innerhalb des test-Verzeichnisses ablegen. Dabei ist pro Parameter eine eigene Zeile zu verwenden.

Falls in dieser Datei definierte Parameter mit von Hand übergebenen Parametern in Konflikt stehen, haben letztere stets Vorrang. Die wichtigsten Parameter von Mocha werden im Exkurs unter "Mocha konfigurieren" beschrieben.