Modern Business Applications Day 2 BASTA! 2013

Unit Testing mit JavaScript
Kommentare

Testing ist gut und wichtig. In Sachen clientseitiges Testen sind viele aber noch nachlässig. Ein großer Fehler, denn immer mehr Logik verlagert sich vom Browser in den Client- JavaScript ist schon lange nicht mehr nur UI-Sugar.

Und für’s Testing gilt generell: Es ist viel einfacher Code zu testen, während man ihn schreibt, als hinterher. Einen Überblick über das Unit Testing mit JavaScript gab Sebastian P.R. Gingter (Smarthouse Media GmH) auf dem Modern Business Applications Day 2 auf der BASTA! 2013.

Was muss, das muss

Grundsätzlich gebe es beim JS-Testing ein paar Probleme:  „Man muss das JavaScript erst mal irgendwie wegkapseln.“ Hinzu kommen noch  Inline Event Handlers, und jQuery testen bedeutet Operationen auf dem DOM testen: „Das macht’s kompliziert.“

Wie man Legacy Code und DOM testet, zeigte Gingter an einer Beispiel-HTML-Seite im Framework  QUnit, das zu jQuery gehört. Es gib aber noch zahlreiche andere Test-Framework im JavaScript-Space: Mocha, Jasmine, JsUnit, Sinon, Screw.Unit etc. pp.

Welches man nimmt, ist letztlich Geschmackssache: Kommt man mit der Syntax zurecht, passt das Framework zur eigenen Art zu arbeiten? Hat es eine starke Community und Support hinter sich, sprich: Hat es Zukunft? Wie lässt es sich in meine gesamte Toolchain integrieren? All solche Fragen, muss jeder Entwickler für sich selbst beantworten und auf dieser Basis eine Wahl treffen.

Ebenso bunt ist der Reigen an verfügbaren Test Runners. Karma, Buster.js und TestSwarm sind nur einige.

Wie eine Toolchain aussehen könnte

Als beispielhafte  Toolchain stellte Gingter das Framework Jasmine in Kombination mit dem Runner Karma und dem Tool PhantomJS vor. Warum gerade diese? „Wegen ihrer Verbreitung: Sie haben eine gute Community,  hinter Karma steht Google -man kann  sich also immer auf Feedback verlassen.“

Jasmine ist ein BDD-Framework, das speziell für JavaScript entwickelt wurde. Das Framework ist Nachfolger von JsUnit, das ausschließlich im Browser lief. Somit war man beim Testen damit natürlich nicht sonderlich flexibel. Jasmine löste das Problem, da es unabhängig vom Browser einsetzbar ist, aber trotzdem Tests im Browser erlaubt.

Das Jasmin-Framework benötigt für die Ausführung der Tests kein DOM und lässt sich daher auch mit mit Node.js verwenden. Hierzu dient ein Modul: jasmine-node wird mit npm install jasmine-node -g installiert und lässt sich über jasmine-node einsetzen.

Der kostenlose und quelloffene Runner Karma, ursprünglich Testacular, ist während der Entwicklung von  AngularJS entstanden. Karma soll einfach aber effektiv sein, daher wurde er als ein Kommandozeilen-Tool konzipiert, ist leicht zu installieren, konfigurieren und auszuführen. Testen kann man im Headless Modus mit PhantomJS. PhantomJS ist ein WebKit mit JavaScript-Engine dahinter, mit dem man testen kann, wie sich JavaScript im DOM verhält. Man hat also quasi einen DOM Browser ohne Browser. „Wenn man also nur mal eine kleine DOM Manipulation testen will, ohne browserspezifisches an Code, dann eignet sich dieses Tool sehr gut.“

Gleichzeitig und vor allem auch parallel geht mit Karma das Ausführen der Tests in realen Browsern – ein Feature, das gerade in der Frontend-Entwicklung nützlich ist.

Gingters Beispiel-Toolchain ist gerade deswegen einen Blick wert, da Karma zwar kein Test-Framework favorisiert, aber mit Jasmine Out of the Box ohne weitere Installation zur Nutzung bereitsteht.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -