Jasmine Was ist Jasmine?

Jasmine ist ein Open Source JavaScript Framework, mit dem jede Art von JavaScript-Anwendung getestet werden kann. Es folgt dem Behavior Driven Development (BDD)-Verfahren, bei dem Tests vor dem eigentlichen Code geschrieben werden. So lässt sich sicherstellen, dass jede Zeile der JavaScript-Anweisung ordnungsgemäß als Unit getestet wird. Durch das Befolgen des BDD-Verfahrens bietet Jasmine eine schmale Syntax, um die kleinste Einheit der gesamten Anwendung zu testen (Unit-Test), anstatt die Anwendung als Ganzes zu testen.

Jasmine und BDD im Allgemeinen versuchen, Tests in einem für den Menschen lesbaren Format zu beschreiben, so dass auch Personen ohne technischen Hintergrund verstehen können, was getestet wird. Aber auch für technisch versierte Anwender ist das Lesen von Tests im BDD-Format viel einfacher und schneller.

Jasmine ist ein Open Source Tool, das unter der offenen MIT-Lizenz verfügbar ist.

 

Geschichte

Bereits vor der aktiven Entwicklung von Jasmine haben die Entwickler bei Pivotal Labs für Jasmine ein ähnliches Unit-Test Framework namens JsUnit entwickelt. JsUnit lief jedoch nur im Browser, wodurch die Testmöglichkeiten weniger flexibel waren. Um den JavaScript-Code im Browser testen zu können, muss er in die HTML-Seite eingebettet sein. Heutzutage läuft JavaScript jedoch oftmals unabhängig vom HTML-Code. Aus diesem Grund entwickelte Pivotal Labs im Jahr 2009 das Jasmine-Framework, das auch unabhängig vom Browser eingesetzt werden kann.

Funktionsweise

Es gibt zwei Möglichkeiten, Jasmine zum Schreiben von Tests zu verwenden. Eine Möglichkeit ist, die Standalone-Version zu nutzen, die mit specRunner.html geliefert wird (der die Testergebnisse im Browser anzeigt). Die andere Möglichkeit ist, Jasmine einfach zu installieren, Tests zu schreiben und sie mit einem Test-Runner wie Karma auszuführen, um die Ergebnisse im Konsolenfenster angezeigt zu bekommen.

Jasmine ist sehr einfach in jede Art von Entwicklungsmethodik zu implementieren. Alles, was man braucht, ist die Standalone-Bibliotheksdateien von der offiziellen Website jasmine.github.io/ herunterzuladen und in die eigene Anwendung zu implementieren. Jasmine bietet ein umfangreiches Set an integrierten Matchern, die einen booleschen Wert ausgeben: true, wenn die Erwartung erfüllt wird (eine Möglichkeit, anzuzeigen, dass der Test erfolgreich war) oder false, wenn die Erwartung nicht erfüllt wird. Beispiele für integrierte Matcher sind toEqual, toBe, toBeTruthy, toBeFalsy, toContain, toBeDefined, toBeUndefined, toBeNull, toBeNaN, toBeGreaterThan, toBeLessThan, toBeCloseTo.

Der Identitäts-Matcher toBe prüft, ob zwei Objekte identisch sind. Die Bedingungsabgleicher toBeTruthy, toBeFalsy werten aus, ob etwas wahr oder falsch ist und toBeDefined, toBeUndefined prüfen, ob etwas definiert oder undefiniert ist. Wie der Name schon sagt, prüft toBeNull, ob etwas null ist und toBeNaN, ob etwas keine Zahl (NaN) ist. Der Präzisions-Matcher toBeCloseTo akzeptiert zwei Parameter und prüft, ob eine Zahl in der Nähe des ersten Parameters liegt, und zwar mit einer bestimmten dezimalen Genauigkeit, die durch den zweiten Parameter angegeben wird. Der Matcher toContain wird verwendet, um zu überprüfen, ob ein Element, ein Objekt oder ein Sub-String in einem Array, einer Liste oder einem String enthalten ist.

Vor- und Nachteile

Jasmine hat viele Vorteile: Es ist nicht von anderen JavaScript-Frameworks abhängig. Es benötigt kein DOM. Und es hat eine saubere, leicht verständliche Syntax, so dass das Schreiben von Tests sehr einfach ist. Es ist so aufgebaut, dass es einfach einzurichten und in fast jedem Szenario zu verwenden ist. Es benötigt in den meisten Szenarien einen Runner, wie Karma oder Chutzpah, aber einige Distros (wie das Jasmine-Node-Npm) haben einen eingebaut. Es ist daher für die meisten Anwendungsfälle gut geeignet, wobei asynchroner Code das Hauptproblem darstellt.

Vorteile von Jasmine

  • Einfache Verwendung mit Node.js durch jasmin-node
  • Es ist alles enthalten, was man zum Testen seines Codes benötigt
  • Leicht einzurichten
  • Schöne, flüssige Syntax für Assertions eingebaut
  • Wird von vielen CI-Servern unterstützt
  • Beschreibende Syntax für BDD-Paradigma
  • Keine Abhängigkeiten, nicht einmal DOM

Nachteile von Jasmine

  • Asynchrones Testen kann Probleme bereiten
  • Verlangt ein bestimmtes Suffix für alle Testdateien (standardmäßig *spec.js)

 

Verwandte Begriffe