Anzeige
Anzeige
UX & Design
Artikel merken

Unit-Testing für JavaScript: Jasmine als Basis für Jest

Ganz ehrlich: Wer liebt es, Tests zu schreiben? Die Facebook-Entwickler auch nicht. Deshalb haben sie Jest ins Leben gerufen – schmerzfreies JavaScript Unit-Testing. In diesem Artikel zeigen wir euch Jest und wie ihr es einsetzen könnt.

Von Mario Janschitz
2 Min. Lesezeit
Anzeige
Anzeige

Eine Alternative für Jasmine: Jest. (Screenshot: Facebook)

Jest basiert auf dem relativ bekannten Test-Framework Jasmine, kann aber Einiges mehr. Neben den Basis-Features von Jasmine ist Jest auch in der Lage, eine ganze Reihe von Vorgängen zu automatisieren. So ist Jest in der Lage, selbstständig alle Tests in einem Repository zu finden, oder Mock-Objekte ganz automatisch zu generieren zu, damit du deinen Code schneller Testen kannst – ohne irgendwelche Abhängigkeiten berücksichtigen zu müssen.

jest

Jest erweitert das bekannte Testing-Framwork Jasmine. (Grafik: Facebook)

Anzeige
Anzeige

Jest kann über ein Commando-Tool genutzt werden, denn das Framework durchläuft Tests auf einem Fake-DOM, und das paralell.

In vier Schritten: Jest anwenden

Das folgende Beispiel geht davon aus, dass ihr die sum.js-Klasse testen wollt, die nichts anders macht, als zwei Werte zu addieren.

Anzeige
Anzeige
// sum.js
function sum(value1, value2) {
  return value1 + value2;
}
module.exports = sum;

Um einen Test zu entwicklen, müsst ihr folgende Test-Datei im Verzeichnis tests/ hinterlegen:

Anzeige
Anzeige
// __tests__/sum-test.js
jest.dontMock('../sum');

describe('sum', function() {
 it('adds 1 + 2 to equal 3', function() {
   var sum = require('../sum');
   expect(sum(1, 2)).toBe(3);
 });
});

Mit npm install jest-cli --save-dev könnt ihr das Command-Tool starten. Wenn ihr eure package.json aktualisiert mit …

{
 ...
 "scripts": {
   "test": "jest"
 }
 ...
}

… aktualisiert, könnt ihr den Test via npm test ausführen.

Anzeige
Anzeige

Automatische Mock-Objekte

Ein Grundprinzip des Unit-Testings ist, dass man nur eine „Unit“ testet. Nun ist es aber so, dass diese Einheiten von anderer Software abhängig ist und auf „Modul-Größe“ heranwachsen kann. Und genau hier liegt die Stärke von Jest. Das Test-Framework macht es extrem einfach, einzelne Module von Abhängigkeiten zu isolieren und diese zu testen – völlig automatisiert. Jest generiert somit selbstständig Mock-Objekte um die Funktionstüchtigkeit einzelner Module, ohne die eigentlichen Abhängigkeiten, testen zu können. Hier ein Beispiel:

// CurrentUser.js
var userID = 0;
module.exports = {
  getID: function() { 
    return userID;
  },
  setID: function(id) {
    userID = id;
  }
};
// login.js
var CurrentUser = require('./CurrentUser.js');

Wenn ihr die long.js-Datei mit NodeJS ausführt, wird Jest nicht eingreifen, jedoch: Ein Unit-Test für login.js veranlasst Jest, die require()-Methode zu verändern. Nämlich so, dass sich der Code wie folgt verhält:

var CurrentUser = {
  getID: jest.genMockFunction(),
  setID: jest.genMockFunction()
};

Durch diese Anpassung wird die „echte“ Current.js-Datei durch Mock-Objekte ersetzt. Der zu testende Code ist also isoliert worden, kann aber trotzdem uneingeschränkt getestet werden. Somit müssen keine zusätzlichen „Boilerplates“ entwickelt werden, nur für Abhängigkeiten, die ihr sowieso nicht einem Test unterziehen wolltet.

Anzeige
Anzeige

Jest ist sinnvolle Alternative zu Jasmine

Es ist ein guter Ansat, vieles in einem Framework bereitzustellen, aber Entwicklern trotzdem die Möglichkeit zu bieten, in Einzelfällen anders vorgehen zu können – ganz ohne „dirty hacks“.

Gerade die Mockup-Funktion bei Jest ist eine solche Möglichkeit. Durch die jest.mock()– und jest.dontMock()-APIs könnt ihr bestimmen wie sich Mock-Objekt verhalten. Zusätzlich können in Jest – in speziellen Fällen – völlig neue und eigene Mock-Objekte manuell implementiert werden.

Wenn ihr mehr über Jest erfahren wollt, dann kann ich euch die Dokumentation empfehlen. Das Test-Framework könnt ihr bei GitHub herunterladen. Hier findet ihr ähnliche Artikel zu Frameworks wie Jest.

Anzeige
Anzeige

Was sagt ihr zu Facebooks JavaScript-Unit-Testing?

Mehr zu diesem Thema
Fast fertig!

Bitte klicke auf den Link in der Bestätigungsmail, um deine Anmeldung abzuschließen.

Du willst noch weitere Infos zum Newsletter? Jetzt mehr erfahren

Anzeige
Anzeige
3 Kommentare
Bitte beachte unsere Community-Richtlinien

Wir freuen uns über kontroverse Diskussionen, die gerne auch mal hitzig geführt werden dürfen. Beleidigende, grob anstößige, rassistische und strafrechtlich relevante Äußerungen und Beiträge tolerieren wir nicht. Bitte achte darauf, dass du keine Texte veröffentlichst, für die du keine ausdrückliche Erlaubnis des Urhebers hast. Ebenfalls nicht erlaubt ist der Missbrauch der Webangebote unter t3n.de als Werbeplattform. Die Nennung von Produktnamen, Herstellern, Dienstleistern und Websites ist nur dann zulässig, wenn damit nicht vorrangig der Zweck der Werbung verfolgt wird. Wir behalten uns vor, Beiträge, die diese Regeln verletzen, zu löschen und Accounts zeitweilig oder auf Dauer zu sperren.

Trotz all dieser notwendigen Regeln: Diskutiere kontrovers, sage anderen deine Meinung, trage mit weiterführenden Informationen zum Wissensaustausch bei, aber bleibe dabei fair und respektiere die Meinung anderer. Wir wünschen Dir viel Spaß mit den Webangeboten von t3n und freuen uns auf spannende Beiträge.

Dein t3n-Team

Enrico Reinsdorf

Hallo zusammen, eigentlich ein sehr interessanter Artikel, wenn da nicht die deutsche Sprache wäre. Nur ein paar Beispiele:

Jest ist sinnvolle Alternative „to“ Jasmine
Ein Unit-Test für login.js veranlasst Jest, die require()-Methode „verändert“.

Vielleicht sollte Mario Janschitz neben dem redaktionellen Wert seines Artikels auch Wert auf ein sauberes Deutsch legen.

Antworten
Augenbluten

Irgendwie wurde der Artikel leider ziemlich schlampig zusammengestückelt.

Antworten
Mario Janschitz

Hallo! Danke für den Hinweis auf die zwei Fehler.
Ich weiß, als Leser neigt man immer gerne dazu wild zu spekulieren.

Allerdings kann es schon passieren, dass man ein „to“ anstatt einem „zu“ schreibt, wenn man den ganzen Tag englische Dokumentationen liest.

Liebe Grüße,

Antworten

Melde dich mit deinem t3n Account an oder fülle die unteren Felder aus.

Bitte schalte deinen Adblocker für t3n.de aus!
Hallo und herzlich willkommen bei t3n!

Bitte schalte deinen Adblocker für t3n.de aus, um diesen Artikel zu lesen.

Wir sind ein unabhängiger Publisher mit einem Team von mehr als 75 fantastischen Menschen, aber ohne riesigen Konzern im Rücken. Banner und ähnliche Werbemittel sind für unsere Finanzierung sehr wichtig.

Schon jetzt und im Namen der gesamten t3n-Crew: vielen Dank für deine Unterstützung! 🙌

Deine t3n-Crew

Anleitung zur Deaktivierung
Artikel merken

Bitte melde dich an, um diesen Artikel in deiner persönlichen Merkliste auf t3n zu speichern.

Jetzt registrieren und merken

Du hast schon einen t3n-Account? Hier anmelden

oder
Auf Mastodon teilen

Gib die URL deiner Mastodon-Instanz ein, um den Artikel zu teilen.

Anzeige
Anzeige