JavaScript | Testframeworks

JavaScript client- und serverseitig testen
Kommentare

Kennen Sie das ungute Gefühl, wenn Sie ein neues Feature umsetzen und nicht genau wissen, ob es in seiner gesamten Funktionalität so arbeitet, wie es soll? Noch schlimmer ist es, wenn Sie bestehende Funktionalität anpassen und nicht wissen, ob nach der Änderung noch alles so funktioniert wie zuvor. Für Ihr Problem existiert allerdings eine sehr einfache Lösung: Testen Sie Ihr Projekt. Auf Serverseite hat sich das Testen von Methoden bereits seit vielen Jahren bewährt und schafft Sicherheit für die Entwickler. Anders sieht es im Frontend aus. Was und vor allem wie soll man JavaScript testen? Dabei existieren auch für JavaScript zahlreiche Frameworks, die Ihnen die Möglichkeit bieten, Ihre Applikation abzusichern.

PHP Magazin

Der Artikel „JavaScript client- und serverseitig testen“ von Sebastian Springer ist erstmalig erschienen im PHP Magazin 3.2013

Wie in anderen Sprachen existieren auch für JavaScript Implementierungen von Testframeworks. Und hier liegt auch schon das Problem: Wo es in anderen Sprachen nur wenige Frameworks gibt oder sich ein oder wenige Frameworks als Standard etabliert haben, existieren in JavaScript zahlreiche Frameworks nebeneinander. Und fast jedes JavaScript-Framework bringt sein eigenes Testframework mit. Setzen Sie ein Framework wie beispielsweise jQuery ein, stehen Sie in diesem Fall vor einer relativ einfachen Auswahl: Entweder Sie entscheiden sich für den Weg des geringsten Widerstands und setzen das zugehörige Testframework, in diesem Fall QUnit, ein oder Sie verwenden ein plattformunabhängiges Framework. Wie aber treffen Sie die richtige Entscheidung?

Dieser Artikel soll Ihnen dabei helfen, das beste Framework für Ihre Situation auswählen zu können. Außerdem werden einige Kriterien vorgestellt, anhand derer Sie auch andere Testframeworks, die hier nicht behandelt werden, beurteilen und bewerten können.

Aus der Fülle an verfügbaren Frameworks greifen wir hier vier heraus, die die verschiedenen Bereiche recht gut widerspiegeln. Dabei reicht die Auswahl von recht einfachen Umsetzungen, die Sie für reine Assertion-Tests verwenden können bis hin zu umfangreichen Implementierungen, die es Ihnen ermöglichen, mehrere Browser zu kontrollieren und das Testen von asynchronen Funktionen erlauben. Zunächst sehen wir uns die Kandidaten im Vergleich an. Die Kriterien sind hier:

  • die Installation des Frameworks
  • wie die Tests organisiert werden können
  • welche Assertions Ihnen zur Verfügung stehen
JsUnit

Beginnen wir mit dem sehr alten, aber dennoch einfachen Framework JsUnit. Die Entwicklung an diesem Werkzeug begann bereits im Jahr 2001. Die letzte Version 1.3 wurde 2007 veröffentlicht. Seither wird JsUnit nicht mehr aktiv weiterentwickelt. Mit diesem Framework unternahmen die Entwickler den Versuch, das Testframework JUnit von Java in JavaScript zu portieren. JsUnit ist eine Open-Source-Software, die unter der Apache-Lizenz verfügbar ist. Heruntergeladen werden kann JsUnit von der Webseite [1].

Die Installation und Verwendung dieses Frameworks gestalten sich problemlos. Sie können es an einer beliebigen Stelle im Dateisystem installieren, an der Sie mit Ihrem Browser Zugriff haben. Dazu müssen Sie lediglich ein gezipptes Tar-Archiv von Sourceforge herunterladen und es entpacken. Im Paket befinden sich im Verzeichnis „jsunit“ und dessen Unterverzeichnis „lib“ die Dateien JsUnit.js und JsUtil.js. Diese beiden Dateien benötigen Sie zur Ausführung der Tests. Außerdem müssen Sie eine AllTests.html erstellen, die als Startpunkt für die Tests dient. Hier können Sie dann sowohl Ihre Quellcodedateien, die Sie testen möchten, als auch die Dateien mit den Tests mittels -Tag einbinden und müssen dann lediglich diese Datei in Ihrem Browser laden, und die Tests werden ausgeführt. Den Aufbau der AllTests-Datei können Sie aus dem Verzeichnis jsunit/samples aus der Datei AllTests.html kopieren. Sie müssen nur ein paar Stellen für Ihre Zwecke anpassen und haben dann bereits eine voll funktionsfähige Testumgebung.

Ein Unit Test in JsUnit besteht aus einer Methode, die eine oder mehrere so genannte Assertions enthält. Die Methoden beginnen jeweils mit dem Präfix test, dem ein möglichst beschreibender Name für den Test folgt. Das Präfix ist zwingend, da eine Methode ohne es nicht als Test erkannt und daher nicht ausgeführt wird. Die Tests sind Teil einer Klasse, die von der JsUnit-Klasse TestCase über Prototypenvererbung ableitet. Die einzelnen Testklassen werden dann weiter in so genannten Testsuites gruppiert. Eine Testsuite-Klasse wird von der JsUnit-internen Klasse TestSuite abgeleitet. Führen Sie die Tests in Ihrem Browser aus, wird diese logische Gruppierung durch die Ausgabe von > Starting test suite… und < Completed test suite… verdeutlicht.

Innerhalb dieser Ausgaben wird für jeden ausgeführten Test die Nummer des Tests, die Klasse und der Methodenname angezeigt. Falls Sie die Methoden setUp und tearDown in einer Testklasse definieren, werden sie vor beziehungsweise nach jedem Test ausgeführt. So können Sie die Umgebung für die Tests vorbereiten beziehungsweise die Auswirkungen der Tests zurücksetzen.


Themen der folgenden Seiten:

  • Assertions
  • Unit Test mit JsUnit
  • QUnit
  • Jasmine
  • JsTestDriver
  • Fazit
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -