Jasmine Framework-Tutorial: Unit-Tests mit Beispiel

⚡ Intelligente Zusammenfassung

Jasmine ist verhaltensorientiert JavaEin Framework für Skripttests, das Node.js-Unit-Tests ohne Browser oder DOM ausführt und dabei describe-Blöcke, specs und expect-Matcher verwendet, um zu überprüfen, ob sich jede exportierte Funktion wie dokumentiert verhält.

  • 🔘 Rolle des Frameworks: Jasmine testet alles JavaSkript ohne Browser, DOM oder Hilfsbibliotheken.
  • ☑️ Umgebungseinrichtung: Installieren Sie das Modul, führen Sie jasmine init aus und überprüfen Sie anschließend spec/support/jasmine.json.
  • ✅ Spezifikationsmuster: describe benennt eine Suite, es definiert eine Spezifikation, expect überprüft das Ergebnis.
  • 🧪 Matcher: Die Präfixe toBe, toEqual, toContain, toThrow und toHaveBeenCalled decken die meisten Aussagen ab.
  • ️ Moderner Läufer: Das gepflegte Jasmine-Paket ersetzt das nicht mehr gepflegte Jasmine-Node-Modul.
  • 📊 Wahl des Frameworks: Jasmine versendet Behauptungen und Spione, während Jest parallele Läufe und Momentaufnahmen hinzufügt.

Jasmine-Framework-Tutorial für Unit-Tests von Node.js-Anwendungen

Was ist JasmineJS?

Jasmine ist ein Open-Source- und sehr beliebtes JavaSkriptbibliothek-Testframework zum Testen aller Arten von JavaSkriptanwendung. Jasmine folgt dem Behavior Driven Development (BDD)-Verfahren, um sicherzustellen, dass jede Zeile JavaDie Skriptanweisung wird ordnungsgemäß auf Komponenten getestet.

Wofür wird das Jasmine Framework verwendet?

Tests sind ein Schlüsselelement jeder Anwendung. Für Unit-Tests in Node.js steht das Framework Jasmine zur Verfügung. Anfang der 2000er-Jahre gab es bereits ein Framework für Tests. JavaSkript Anwendungen namens JsUnit. Later Dieses Framework wurde aktualisiert und ist jetzt als Jasmine bekannt.

Jasmine hilft bei der Automatisierung Unit Tests, etwas, das sich bei der Entwicklung zu einer wichtigen Praxis entwickelt hatping und die Bereitstellung moderner Webanwendungen.

In diesem Jasmine-Tutorial erfahren Sie, wie Sie Ihre Umgebung mit Jasmine einrichten und Jasmine-Tests für Ihre erste Node.js-Anwendung ausführen.

Jasmine zum Testen von Node.js-Anwendungen

Jasmin ist ein Verhaltensgesteuerte Entwicklung (BDD) Testframework für JavaSkript. Es tut kein Frontalunterricht. verlassen sich auf Browser, DOM oder andere JavaSkript-Framework. Daher eignet es sich für Websites. Node.js Projekte oder überall dort, wo JavaDas Skript kann ausgeführt werden. Um Jasmine verwenden zu können, müssen Sie zunächst die erforderlichen Jasmine-Module herunterladen und installieren.

So richten Sie die Jasmine-Testumgebung ein

Im nächsten Schritt dieses Jasmine-Node.js-Tutorials müssen Sie Ihre Umgebung initialisieren und die Jasmine-Konfigurationsdatei überprüfen. Die folgenden Schritte zeigen, wie Sie Jasmine in Ihrer Umgebung einrichten.

Schritt 1) Installieren Sie NPM-Module
Du brauchst Installieren Sie NPM Das Jasmine-Modul ermöglicht die Nutzung des Jasmine-Frameworks innerhalb einer Node-Anwendung. Um das Modul jasmine-node zu installieren, führen Sie den folgenden Befehl aus.

npm install jasmine-node

Versionshinweis (2026): Der oben genannte historische Befehl funktioniert noch, aber Jasminknoten Das Modul befindet sich im Wartungsmodus und verwendet Jasmine 1.3. Verwenden Sie es daher nur für ältere Projekte. Neue Node.js-Versionen installieren die gewartete Version. Jasmine CLI als Entwicklungsabhängigkeit und ruft es über npx auf:

npm install --save-dev jasmine
npx jasmine init

Jasmine 6.x ist die aktuelle Hauptversion und unterstützt Node.js 20, 22 und 24, wobei Node.js 24 die aktive LTS-Version im Jahr 2026 ist.

Schritt 2) Initialisieren Sie die Jasmine-Umgebung
Projektinitialisierung – Dabei erstellt Jasmine automatisch ein Verzeichnis „spec“ und eine Konfigurationsdatei (JSON). Im Verzeichnis „spec“ werden alle Testdateien gespeichert. So weiß Jasmine, wo sich Ihre Tests befinden und kann sie entsprechend ausführen. JSON Die Datei dient zum Speichern spezifischer Konfigurationsinformationen über Jasmine.

Um die Jasmine-Umgebung zu initialisieren, führen Sie den folgenden Befehl aus:

jasmine init

Schritt 3) Überprüfen Sie Ihre Konfigurationsdatei.
Die Konfigurationsdatei wird im Ordner spec/support als jasmine.json gespeichert. Diese Datei listet die Quelldateien und Spezifikationsdateien auf, die der Jasmine-Runner einschließen soll.

Der untenstehende Screenshot zeigt ein typisches Beispiel der jasmine.json-Datei für Jasmine.

Jasmine-Konfigurationsdatei im Ordner „spec support“, die das Verzeichnis „spec“ und die Datei „spec_files“ anzeigt

  1. Beachten Sie, dass hier das Spezifikationsverzeichnis angegeben wird. Wie bereits erwähnt, sucht Jasmine beim Ausführen nach allen Tests in diesem Verzeichnis.
  2. Als nächstes ist der Parameter „spec_files“ zu beachten. Dieser gibt an, dass den erstellten Testdateien das Schlüsselwort „spec“ angehängt werden sollte.

Konfigurationshinweis: In Jasmine 6.x akzeptiert dieselbe Datei auch Helfer, die einmal vor jeder Spezifikation geladen werden, und ein env Der Block enthält Optionen wie random und stopSpecOnExpectationFailure. Der Standard-Glob-String für spec_files ist **/*[sS]pec.?(m)jsund eine andere Datei kann übergeben werden –config oder unter der JASMINE_CONFIG_PATH variabel.

Als nächstes lernen wir in diesem Jasmine-Framework-Tutorial, wie man Jasmine zum Testen von Node.js-Anwendungen verwendet.

So verwenden Sie Jasmine zum Testen von Node.js-Anwendungen

Um Jasmine Unit Testing für Node.js-Anwendungen verwenden zu können, müssen eine Reihe von Schritten befolgt werden.

In unserem folgenden Beispiel definieren wir ein Modul, das zwei zu testende Zahlen addiert. Dazu erstellen wir eine separate Codedatei mit dem Testcode und verwenden anschließend Jasmine, um die Additionsfunktion zu testen.

Schritt 1) Definieren Sie den zu testenden Code. Wir werden eine Funktion definieren, die zwei Zahlen addiert und das Ergebnis zurückgibt. Dieser Code wird in eine Datei namens „Add.js“ geschrieben.

Der untenstehende Screenshot zeigt das fertige Add.js-Modul, und der gleiche Code wird darunter als Text wiederholt.

Das Add.js-Modul exportiert die Funktion AddNumber, die die Summe zweier Parameter zurückgibt.

var exports=module.exports={};
exports.AddNumber=function(a,b)
{
return a+b;
};

Code Erläuterung

  1. Das Schlüsselwort „exports“ wird verwendet, um sicherzustellen, dass andere Dateien tatsächlich auf die in dieser Datei definierte Funktionalität zugreifen können.
  2. Anschließend definieren wir eine Funktion namens „AddNumber“. Diese Funktion ist so definiert, dass sie zwei Parameter annimmt, a und b. Die Funktion wird dem Modul „Exports“ hinzugefügt, um die Funktion als öffentliche Funktion zu machen, auf die andere Anwendungsmodule zugreifen können.
  3. Endlich sorgen wir dafür, dass unsere Funktion den Mehrwert der Parameter zurückgibt.

Schritt 2) Als Nächstes müssen wir unseren Jasmine-Testcode definieren, mit dem wir unsere „Add“-Funktion in der Datei Add.js testen. Der folgende Code muss in eine Datei namens „Add.js“ eingefügt werden. add-spec.js.

HinweisDas Wort „spec“ muss der Testdatei hinzugefügt werden, damit es von Jasmine erkannt werden kann.

Der folgende Screenshot zeigt dieselbe Spezifikationsdatei, geöffnet in einem Editor.

Die Datei add-spec.js enthält eine describe-Suite und eine it-Spezifikation, die überprüft, ob AddNumber den Wert 11 zurückgibt.

var app=require("../Add.js");
describe("Addition",function(){
it("The function should add 2 numbers",function() {
var value=app.AddNumber(5,6);
expect(value).toBe(11);
});
});

Code Erläuterung

  1. Wir müssen zuerst unsere Add.js-Datei einbinden, damit wir die Funktion „AddNumber“ in dieser Datei testen können.
  2. Wir erstellen jetzt unser Testmodul. Der erste Teil des Testmoduls besteht darin, eine Methode zu beschreiben, die unserem Test im Grunde einen Namen gibt. In diesem Fall lautet der Name unseres Tests „Addition“.
  3. Als nächstes geben wir eine Beschreibung für unseren Test mit der „it“-Methode.
  4. Wir rufen nun unsere AddNumber-Methode auf und übergeben ihr die beiden Parameter 5 und 6. Diese werden an die AddNumber-Methode in der Datei Add.js übergeben. Der Rückgabewert wird anschließend in einer Variablen namens „value“ gespeichert.
  5. Der letzte Schritt ist der Vergleich bzw. unser eigentlicher Test. Da wir erwarten, dass die Funktion AddNumber den Wert 11 zurückgibt, definieren wir dies mit der Methode expect(value).toBe(der erwartete Wert).

Ausgang

  1. Um den Test auszuführen, muss man den Befehl jasmine ausführen.
  2. Der folgende Screenshot zeigt, dass Jasmine nach Ausführung des Befehls erkennt, dass ein Test namens „add-spec.js“ vorhanden ist, und diesen entsprechend ausführt. Eventuelle Fehler werden angezeigt.

Konsolenausgabe des Jasmine-Befehls, der den ausgeführten Add-Spec-Test meldet.

Das Add-Beispiel verwendet nur einen einzigen Matcher, Jasmine liefert jedoch einen vollständigen Satz davon aus. Die folgende Tabelle listet diejenigen auf, die nahezu jede Assertion abdecken, die Sie schreiben werden.

Jasmine Matchers – Die wichtigsten Funktionen, die Sie am häufigsten verwenden werden

Ein Matcher ist der Vergleich, der auf expect() folgt. Verkette .not vor einen beliebigen Matcher, um ihn umzukehren, wie in expect(value).not.toBe(11).

Matcher Was wird geprüft Typische Verwendung
zu sein Strenge Identität, derselbe Vergleich wie === expect(value).toBe(11)
gleich Tiefe Gleichheit von Objekten und Arrays expect(user).toEqual({id: 1})
enthält Zugehörigkeit zu einem Array oder einer Zeichenkette expect(files).toContain('add-spec.js')
noch zu definieren Der Wert ist nicht undefiniert. expect(app.AddNumber).toBeDefined()
werfen Die umschlossene Funktion löst einen Fehler aus expect(callAdd).toThrow()
toHaveBeenCalled Mindestens einmal wurde ein Spion eingesetzt. expect(logger.write).toHaveBeenCalled()

Zwei Gewohnheiten sorgen dafür, dass Fehler lesbar bleiben. Verwenden Sie `toBe` nur für primitive Datentypen und identische Referenzen, da zwei Objekte mit gleichem Inhalt niemals `===` entsprechen. Verwenden Sie `toEqual` für Strukturen und fügen Sie `toHaveBeenCalledWith` hinzu, wenn die Argumente genauso wichtig sind wie der Aufruf selbst.

Aufbau, Abbau und Spione in Jasmine

Echte Suiten benötigen einen gemeinsamen Status und zusätzliche Arbeitsumgebungen für langsamere Kollaborateure. Jasmine bietet beides ohne zusätzliche Pakete.

  • vor jedem und nach jedem Führe den Befehl vor und nach jeder Spezifikation innerhalb eines describe-Blocks aus, der der natürliche Ort zum Neuerstellen von Fixtures ist.
  • vor allem und nach allem Führen Sie die Befehle einmal für den gesamten Block aus, daher sollten sie für aufwändige Arbeiten wie das Öffnen einer Verbindung reserviert werden.
  • spyOn(object, 'method') ersetzt eine reale Methode durch eine tracking double; add .and.returnValue() to control what it returns.
  • jasmine.createSpy('name') Erstellt ein eigenständiges Double für einen Callback, der kein Objekt zum Anhängen hat.
  • Asynchrone Spezifikationen kann als async und await deklariert werden, kann ein Promise zurückgeben oder kann einen done-Callback akzeptieren, der genau einmal aufgerufen werden muss.

Spione werden zwischen den Tests zurückgesetzt, sodass eine Testsuite niemals eine simulierte Methode in den nächsten Test weitergibt. Diese Isolation bewirkt, dass ein fehlgeschlagener Test auf einen einzelnen Fehler hinweist und nicht auf eine ganze Kette von Fehlern – genau die gleiche Vorgehensweise, die im Folgenden beschrieben wird. Unit-Test Grundlagen.

Jasmine vs Mocha vs Jest

Jasmine ist eines von drei Frameworks, die dominieren. JavaBeim Testen von Skripten hängt die Wahl meist davon ab, wie viel Verkabelung man selbst besitzen möchte.

Aspekt Jasmin Mocha ist
Behauptungen Erbaut im Hinzugefügt, üblicherweise Chai Erbaut im
Spione und Spott Erbaut im Hinzugefügt, üblicherweise Sinon Erbaut im
Ausführung Seriell Seriell Parallele Prozesse
Snapshots Nein Nein Ja
Gemeinsames Zuhause Angular, reines Node.js Flexible Node.js-Stacks React und moderne Bundler

Pick Mocha wenn Sie Ihren eigenen Assertions- und Mocking-Stack zusammenstellen möchten, und ist Bei parallelen Ausführungen sind Testabdeckung und Snapshots wichtiger als die Konfigurationskontrolle. Jasmine bleibt die ressourcenschonendste Option, die dennoch vollständig ist, weshalb sie weiterhin weit verbreitet ist. Automatisierungstests Suiten.

Häufig gestellte Fragen

Jasmine liest `spec_dir` als Präfix und anschließend alle in `spec_files` aufgeführten Glob-Muster, sodass nur übereinstimmende Dateien ausgeführt werden. Pfade, die mit einem Ausrufezeichen beginnen, werden ausgeschlossen, und Hilfsfunktionen werden einmalig vor den Spezifikationen geladen, um die gemeinsame Konfiguration zu registrieren.

Deklarieren Sie die Spezifikation als asynchron und warten Sie auf den Aufruf, geben Sie ein Promise zurück oder akzeptieren Sie einen Done-Callback. asynchroner Leitfaden warnt davor, dass done genau einmal ausgelöst werden muss, da Fehler sonst in der falschen Spezifikation landen.

Geben Sie nach dem Runner einen Pfad oder ein Glob-Muster an, z. B. npx jasmine spec/appSpec.js. Der Parameter `--filter` akzeptiert ein Muster, das mit dem Namen der `describe`-Datei abgeglichen wird. Dadurch erhalten Sie schnelles Feedback, während Sie an einer einzelnen Testsuite arbeiten.

Das Jasminknoten Das Paket befindet sich im Wartungsmodus, enthält weiterhin Jasmine 1.3 und gibt Node.js 10 und 12 als aktuelle Versionen an. Das offizielle Jasmine-Paket tracks das Framework und unterstützte Node.js-Releases stattdessen.

Versehen Sie eine Spezifikation mit einem „x“ (z. B. in „xit“ oder „xdescribe“), meldet Jasmine sie als ausstehend. Verwenden Sie hingegen ein „f“ (z. B. in „fit“ oder „fdescribe“), werden nur die fokussierten Spezifikationen ausgeführt. Entfernen Sie beide Präfixe vor dem Commit.

KI-Assistenten erstellen innerhalb von Sekunden Beschreibungsblöcke, Matcher und Grenzfälle aus einem bestehenden Modul und kennzeichnen Testsuiten, die sporadisch fehlschlagen. Jede generierte Spezifikation muss dennoch überprüft werden, da eine sichere Aussage über fehlerhaftes Verhalten den Fehler verschleiern kann.

GitHub-Copilot Vervollständigt die Spezifikationskörper während der Eingabe und kann im Agentenmodus einen Pull Request öffnen, der nach einem Refactoring fehlerhafte Spezifikationen repariert. Behandeln Sie die Änderungen als Vorschlag und führen Sie die Testsuite selbst aus.

Angular generiert weiterhin Jasmine-Spezifikationen, und ProtracDo. Jasmine wurde vor seiner Archivierung als Standard-Framework verwendet. Teams kombinieren Jasmine nun mit Karma für Browser oder verlagern Browser-Workflows zu Cypress und Dramatiker.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: