Testing

Das Testen von Code wird mit der Anzahl an Zeilen immer wichtiger, um Fehler zu vermeiden oder besser zu entdecken. Bei JavaScript ist dieses Thema nun auch ein fester Bestandteil, der Umfang an Möglichkeiten wächst ständig.

Hier ein paar sehr einfache Beispiele auf GitHub:
js-test-envs

QUnit

Ein JavaScript Unit Test Tool für JavaScript Code.
QUnit Homepage

Jasmine

Ist ein Behavior-Driven Framework zum testen von JavaScript Code.
Jasmine Homepage

Jasmine ist ein unabhängiges Framework, ein Browser ist nicht zwingend erforderlich.

Der Aufbau von einem Test (descripe) hat aber grundsätzlich diese Form, eine Beschreibung und eine Funktion. Die Funktion enthält ein oder mehrere Specs (it) mit weiteren Beschreibungen und entsprechenden Funktionen. Die eigentlichen Testanweisungen (Expectations) können noch zusätzlich Funktionen (Matcher) angehängt bekommen.

Die Tests können nach Bedarf verschachtelt werden.

Soll vor und nach jedem Test etwas ausgeführt werden, nutzt man beforeEach und afterEach.

Jede Testanweisung (Expectations) kann Funktionen (Matcher) angehängt bekommen, um diese zu negieren nutzt man .not.

Wenn die vorhandenen Matcher nicht ausreichend sind kann man sich einfach selber welche schreiben. Selbst geschriebene Matcher werden mit der Funktion addMatchers hinzugefügt. Mit this.actual wird der Paramter der except Funktion angesprochen, weitere Parameter werden der definierten Funktion übergeben.

Dann können wir unseren Matcher direkt nutzen.

Jasmine bietet zusätzlich noch Spione (Spies) an.
Mit der spyOn Funktion kann eine bestehe Funktion mit einem Spion ersetzt werden.
Der Matcher toHaveBeenCalled bietet dann die Möglichkeit zu prüfen ob die Funktion aufgerufen worden ist.

Wenn man an die spyOn eine weitere Funktion anhängt kann man einen bestimmten Wert zurückgeben lassen.

Es ist auch möglich die ganze Funktion mit einer anderen Funktion zu ersetzen.

Zusätzlich zum ersetzen von bestehenden Funktionen kann man mit jasmine.createSpy neue Funktionen erstellen.

Wie bei spyOn können weitere Funktionen genutzt werden.

Sinon

Ist gedacht um Test Stubs and Mocks für JavaScript zu nutzen.
Sinon Homepage

Zombie

Ein Framework für NodeJS zum testen von Client-side JavaScript Code.
Zombie Homepage

Nodeunit

Ein JavaScript Unit Test Tool für NodeJS.
Nodeunit Homepage

Das Gruppieren von Tests ist auch möglich.

Es werden setUp and tearDown vor und nach jedem Test ausgeführt.

Nodeunit wird einfach auf der Konsole gestartet.

Mocha

Ein simples flexibles Framework für NodeJS.
Mocha Homepage

Mocha ist ein JavaScript Test Framework für NodeJS oder dem Browser.

Nach der Installation kann Mocha einfach auf der Konsole ausgeführt werden.

Zusammen mit assert kann man nun Tests schreiben.

Um Mocha im Browser zu nutzen erstellt man sich eine HTML Datei.
Die benötigten Dateien mocha.css und mocha.js kann man hier herunterladen.

Im Browser steht require nicht zur Verfügung, darum muss man eine assert Funktion definieren und den Aufruf entfernen.

Frisby

Ein REST API Testing Framework baut auf NodeJS und Jasmine auf.
Frisbyjs Homepage

PhantomJS

Ein WebKit mit JavaScript API der ohne vorhandenen Browser funktioniert.
PhantomJS Homepage

SlimerJS

Ein Gecko mit JavaScript API der ohne vorhandenen Browser funktioniert.
SlimerJS Homepage

CasperJS

Setzt auf PhantomJS auf bietet die Möglichkeit ein Browserverhalten zu simulieren.
CasperJS Homepage

CasperJS bietet die Möglichkeit eine Webseite komplett auf der Konsole zu testen.
Es kann mit PhantomJS oder mit SlimerJS genutzt werden und bietet zusätzlich nützliche Funktionen um Webseiten zu untersuchen.

CasperJS wird nach der Installation einfach auf der Konsole ausgeführt.

Um zu testen ob alles funktioniert bringt CapserJS einen Selbsttest mit.

Eigene Tests werden einfach als Argument übergeben.

Als erstes erzeugt man eine casper Instanz.

Anschliessend kann man mit der start() Methode ein URL öffnen.

Die then() Methode ist optional, um n Schritte einer Navigation zu testen.

CasperJS nutzt CSS Selektoren um auf die Elemente des DOM zuzugreifen.

Es werden eine Vielzahl von Methoden geboten um mit einer Webseite zu interagieren.

CasperJS hat ein tester Modul um Tests zu schreiben.

Die vorkonfigurierte Instanz kann in der Test Umgebung nicht uberschrieben werden.

Die Testergebnisse werden auf der Konsole ausgegeben, können auch exportiert und in einer xUnit XML Datei gespeichert werden.

js-test-driver

Unterstützt JavaScript Entwickler beim Test-Driven-Development.
js-test-driver Homepage
Jasmine Adapter

JSCheck

Ein Testing-Tool für JavaScript von Douglas Crockford.
JSCheck Homepage

Das Testing-Tool erstellt zufällige Test Cases gegenüber bestimmten Eigenschaften.
jscheck.js stellt das JSC Objekt zur Verfügung welches die benötigten Methoden besitzt.

Es werden 100 Test Cases erstellt, dies ist der Standardwert.

Um JSCheck mit NodeJS zu nutzen muss man diese Zeile am Ende von jscheck.js einfügen.

Dann kann man sich das HTML sparen.

Buster

Ein Testing-Toolkit im Beta Status.
Buster Homepage

ESLint

Ist ein Code Analyse Tool für JavaScript und JSX.
ESLint Homepage

JSHint

Ist ein Code Analyse Tool für JavaScript.
JSHint Homepage

JSCS

Ist ein Code Style Linter für JavaScript.
JSCS Homepage

Yardstick

Ist ein Tool um Metriken für JavaScript zu ermitteln.
Yardstick Homepage

plato

Tool zur JavaScript Code Komplexitäts Visualisierung.
plato Homepage