Communardo Software GmbH, Kleiststraße 10 a, D-01129 Dresden
0800 1 255 255

JavaScript Test Driven Development (TDD) mit jsTestDriver

Die Lauffähigkeit einer Webanwendung in ver­schie­de­nen Browsern auf unter­schied­li­chen Betriebssystemen stellt gerade für die Entwicklung mit JavaScript eine ziem­li­che Herausforderung dar. Der Entwickler muss, um die Anwendung zu tes­ten, sequen­zi­ell durch meh­rere Browser navi­gie­ren um Fehler im JavaScript-Code fest­stel­len zu kön­nen. Wenn ein Fehler gefun­den und beho­ben wurde, geht das­selbe Spiel von vorn los. Die Behebung des Fehlers in Browser A bedeu­tet nicht, dass es im Browser B noch funk­tio­niert. Hinzu kom­men noch die ver­schie­dens­ten Betriebssysteme und Browserversionen. Diese „nie­mals enden wol­lende Geschichte“ macht eine test­ge­trie­bene Entwicklung einer Webanwendung für JavaScript not­wen­dig.

JavaScript und TDD

In der Praxis wird häu­fig die Seite des Clients im Gegensatz zur Serverseite, als eher neben­säch­lich ange­se­hen und meist weg­ge­las­sen. Jedoch wird gerade die Funktionsfähigkeit von JavaScript in Webanwendungen immer wich­ti­ger und sichert damit auch den Erfolg der Software.

Warum ist das automatisierte Testen eigentlich so wichtig?

Der Vorteil liegt vor allem in der Vermeidung von wie­der­keh­ren­den Fehlern. Durch ein „Bug fix“ kann neben der Behebung des eigent­li­chen Fehlers auch der ent­spre­chende Test ange­passt wer­den, um den Fehler zukünf­tig zu ver­mei­den. Weiterhin unter­stüt­zen auto­ma­ti­sierte Tests das Code-Refactoring und damit das DRY-Prinzip („Don’t Repeat Yourself“). Gerade das Umbenennen oder Verschieben von Code stellt eine Quelle für Fehler dar. Zusätzlich hat das Schreiben von Tests den Vorteil, dass neue Entwickler neben der Dokumentation ein tie­fe­res Verständnis für die Funktionsweise des Quellcodes erlan­gen kön­nen.
Der Nachteil einer test­ge­trie­be­nen Entwicklung liegt auf der Hand. Es besteht ein gewis­ser zeit­li­cher Aufwand Tests zu schrei­ben und aktu­ell zu hal­ten. Oft wer­den diese in der Aufwandschätzung klein­ge­re­det und die Anwendung letzt­end­lich unzu­rei­chend getes­tet.

Das auto­ma­ti­sierte Testen sollte einen fes­ten Teil jeder ernst­ge­mein­ten Aufwandschätzung ein­neh­men, um nach­hal­ti­gen Quellcode zu schrei­ben und letzt­end­lich den gesam­ten Zeitfaktor der Fehlersuche zu redu­zie­ren.

Was ist jsTestDriver?

Mittels die­ses All-in-One-Test-Runner wird eine test­ge­trie­bene Entwicklung mit JavaScript ermög­licht. jsTestDriver liegt in der Version 1.3.3d unter der Apache Licence 2.0 und ver­folgt die Ziele wie:

  • eine ein­fa­che Integration in bestehende Systeme
  • ein schnel­les und par­al­le­les Testen in gän­gi­gen Browsern
  • ein tes­ten auf ver­schie­de­nen Betriebssystemen

jsTestDriver besteht aus einem kon­fi­gu­rier­ba­rem Server und Test-Runner-Client.

Quelle: http://code.google.com/p/js-test-driver/

Beim Starten des Servers las­sen sich über den Parameter brow­ser, Pfade zum Installationsort der Browser ange­ben und diese als Slaves bestim­men. Mit dem optio­na­len Parameter con­fig lässt sich auch die Konfigurationsdatei fest­le­gen (ansons­ten wird im Serververzeichnis die Datei jsTestDriver.conf erwar­tet).

java –jar jsTestDriver.jar --port 9876 –-browser "FIREFOXPFAD,..."

Zusätzlich las­sen sich Browser über die kon­fi­gu­rierte Adresse des Servers und dem Adresszusatz /capture als Slave hin­zu­fü­gen. Damit wer­den die Browser in einen Wartestatus ver­setzt und kön­nen nun Kommandos des Servers emp­fan­gen.

http://localhost:9876/capture

Für den Test-Runner-Client las­sen sich unter ande­rem der Server und der Ort von den JavaScript-Sourcen und JavaScript-Tests kon­fi­gu­rie­ren. Beim Ausführen des Test-Runner-Clients wer­den die JavaScript-Sourcen durch Kommandos des Servers in den jewei­li­gen Slave gela­den. Die Tests wer­den über die JavaScript-Engine des ent­spre­chen­den Browsers aus­ge­führt und das Resultat an den Test-Runner-Client zurück­ge­ge­ben.

java --jar jsTestDriver.jar --tests all

<!–[if gte mso 9]> Normal 0 21 false false false DE X‑NONE X‑NONE <![endif]–><!–[if gte mso 9]> <![endif]–>

Integration in Maven

Neben Plugins für Entwicklungsumgebungen wie Eclipse, Visual Studio und IntelliJ gibt es auch ein Plugin für Maven das in der Version 1.3.2.5 ver­füg­bar ist. Die fol­gen­den Code-Beispiele zur Konfiguration von jsTestDriver beru­hen auf Maven 3.

31. Januar 2012

Pin It on Pinterest