JavaScript testen mit JS Test Driver

1 Kommentar

Vor einigen Tagen bin ich auf dem Google Testing Blog über den Artikel Super Fast JS Testing gestolpert. Naja, genau genommen hatte ich den Artikel bereits einmal gelesen, hatte aber leider keine Zeit mir das anzuschauen. Jetzt wollte ich dann aber doch mal genauer wissen, was dahinter steckt. Ich möchte dazu sagen, dass ich absolut kein JavaScript-Experte bin, aber es hat mich unter dem Testaspekt einfach in den Fingern gejuckt.

Also habe ich zunächst mal das JsTestDriver-1.0b.jar von der Projektseite geladen. Und es musste eine kleine JavaScript-Applikation her, die man zum Testen benutzen kann. Meine Wahl fiel auf den folgenden simplen JavaScript-Taschenrechner, bei dem ich allerdings das JavaScript noch in eine eigene Calculator.js Datei extrahiert habe, die nach einigen Änderungen nun wie folgt aussieht:

var calcValue = " ";
 
function clear()
{
	calcValue = " ";
}
 
function updatePrompt()
{
    document.calculator.input.value=calcValue;
}
 
function updateValue(value)
{
  calcValue += value;
}
 
function executeClick(value)
{
	updateValue(value);
	updatePrompt();
}
 
function getResult()
{
	return eval(calcValue);
}

Der JS Test Driver hat von der Grundfunktion her eine gewisse Ähnlichkeit mit Selenium. Auch hier wird zunächst ein Testserver gestartet und es wird ein externer Browser genutzt, um später die JavaScript-Applikation auszuführen. Das Starten des Servers ist denkbar einfach. Es muss nur folgendes Kommando im Verzeichnis angeben, in dem sich das jsTestDriver-JAR befindet:

java -jar JsTestDriver-1.0b.jar --port 4224

Elegant gelöst ist die Verbindung von Browsern an den gestarteten Server. Hierzu muss man lediglich mit dem Browser die entsprechende URL ansurfen. In diesem Fall also http://localhost:4224. Dort gibt es dann einen Link mit dem man den Browser mit dem Server verbinden kann. Es werden wirklich alle gängigen Browser unterstützt und diese können auf beliebigen Rechnern im Netz laufen, solange sie sich mit dem Server verbinden können.

Für den Test selber braucht man nun lediglich zwei weitere Dateien. Zum einen ist dies ein YAML-File, welches definiert welcher Server benutzt werden soll und wo sich die JavaScript Quelldateien befinden. Diese muss jsTestDriver.conf heissen.

Bei dieser Datei gibt es so einige Stolpersteine. So führt z.B. die Zeile
– *.js
zu der wenig vielsagenden Fehlermeldung:
error while scanning an alias expected alphabetic or numeric character, but found something else… org.jvyaml.ScannerException: ScannerException while scanning an alias we had this expected alphabetic or numeric character, but found something else…
Auch muss es die Zeile
– src-test/*.js
zwingend geben (ich vermute mal das „test“ im Verzeichnisnamen ist entscheidend), da sonst keine Tests ausgeführt werden. Ich hatte es zunächst nur mit der einzelnen Zeile
– *.js
probiert und bin somit in beide Fehler gelaufen.

server: http://localhost:4224
 
load:
  - src/*.js
  - src-test/*.js

Dann benötigen wir noch eine JavaScript Testklasse. Diese orientiert sich an JUnit, indem Test-Methoden mit „test“ beginnen müssen. Die folgende Klasse prüft die grundlegenden Rechenarten unserer Calculator-Applikation:

CalculatorTest = TestCase("CalculatorTest");
 
CalculatorTest.prototype.testAddition = function() {
	clear();
	updateValue("10");
	updateValue("+");
	updateValue("32");
	assertEquals("Addition Failed", "42", getResult());
};
 
CalculatorTest.prototype.testMinus = function() {
	clear();
	updateValue("50");
	updateValue("-");
	updateValue("8");
	assertEquals("Minus Failed", "42", getResult());
};
 
CalculatorTest.prototype.testDivide = function() {
	clear();
	updateValue("1764");
	updateValue("/");
	updateValue("42");
	assertEquals("Divide Failed", "42", getResult());
};
 
CalculatorTest.prototype.testMultiply = function() {
	clear();
	updateValue("1");
	updateValue("*");
	updateValue("42");
	assertEquals("Multiply Failed", "42", getResult());
};

Danach lassen sich die Tests von der Kommandozeile ausführen indem man in das Verzeichnis wechselt in dem die jsTestDriver.conf-Datei liegt und dort folgendes Kommando aufruft:

C:\...\Calculator>java -jar JsTestDriver-1.0b.jar --tests all

Total 4 tests (Passed: 4; Fails: 0; Errors: 0) (0,00 ms)
  Firefox 1.9.1.2: Run 4 tests (Passed: 4; Fails: 0; Errors 0) (0,00 ms)

Das ist schon nicht schlecht, aber es geht noch besser, denn das hier beschrieben Eclipse-PlugIn funktioniert problemlos und somit lässt sich sowohl der Server als auch die Tests direkt aus Eclipse heraus starten:

JsTestDriver

Wer also viel JavaScript nutzt und dabei ggf. auch komplexere Logik oder Funktionen implementiert sollte sich JS test Driver auf jeden Fall mal anschauen.

Thomas Jaspers

Langjährige Erfahrung in agilen Softwareprojekten unter Einsatz von Java-Enterprise-Technologien. Schwerpunkt im Bereich der Testautomatisierung (Konzepte und Open-Source Werkzeuge).

Share on FacebookGoogle+Share on LinkedInTweet about this on TwitterShare on RedditDigg thisShare on StumbleUpon

Kommentare

    Kommentieren

    Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.