Sinon für JavaScript (Node.js): Komplettguide mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Sinon für JavaScript (Node.js): Komplettguide mit Beispielen

1. Was ist Sinon und warum braucht man es?

Sinon.js ist eine leistungsstarke Bibliothek für JavaScript, die eigenständige Test-Doubles bereitstellt: Spione (spies), Stubs (stubs) und Mocks (mocks). Sie ist unabhängig vom verwendeten Test-Framework (Mocha, Jest, Jasmine u.a.) und kann mit jedem davon kombiniert werden. Das Hauptziel von Sinon ist es, den zu testenden Code von externen Abhängigkeiten (Datenbanken, APIs, Dateisystem, Timer) zu isolieren, sodass das Verhalten von Funktionen in einer kontrollierten Umgebung geprüft werden kann.

Warum ist das wichtig? In echten Anwendungen rufen Funktionen oft andere Funktionen auf, greifen auf externe Dienste zu oder arbeiten mit asynchronen Operationen. Ohne Sinon können Sie nicht einfach überprüfen, ob eine Callback-Funktion aufgerufen wurde, mit welchen Argumenten, wie oft, oder eine Serverantwort simulieren. Sinon löst diese Probleme elegant und präzise, macht Tests schnell, zuverlässig und vorhersagbar.

Die Bibliothek ist besonders im Node.js-Ökosystem beliebt, wo Modultests entscheidend sind. Sie ermöglicht es, Funktionen zu testen, ohne echte HTTP-Anfragen zu senden, auf Datenbanken zuzugreifen oder auf Timer zu warten. Das beschleunigt die Testausführung um ein Vielfaches und macht sie deterministisch.

2. Installation

Sinon wird über npm installiert. Führen Sie für Node.js folgenden Befehl aus:

npm install sinon --save-dev

Wenn Sie TypeScript verwenden, installieren Sie auch die Typdefinitionen:

npm install sinon @types/sinon --save-dev

Für die Verwendung im Browser können Sie die CDN-Version einbinden:

<script src="https://cdn.jsdelivr.net/npm/sinon@latest/pkg/sinon.js"></script>

Nach der Installation importieren Sie die Bibliothek in Ihre Testdatei:

const sinon = require('sinon'); // CommonJS
// oder
import sinon from 'sinon'; // ES Modules

3. Schnellstart – Minimales Arbeitsbeispiel

Betrachten wir ein einfaches Beispiel: Eine Funktion, die einen Callback mit einer Begrüßung aufruft. Wir möchten prüfen, ob der Callback mit dem richtigen Argument aufgerufen wurde.

const sinon = require('sinon');

// Die zu testende Funktion
function greet(name, callback) {
  callback(`Hallo, ${name}!`);
}

// Test mit einem Spion (spy)
const callbackSpy = sinon.spy();
greet('Alice', callbackSpy);

console.log(callbackSpy.calledOnce);    // true
console.log(callbackSpy.calledWith('Hallo, Alice!')); // true

Dieses Beispiel zeigt die grundlegende Idee: Wir erstellen einen Spion, übergeben ihn an die zu testende Funktion und prüfen dann, wie er aufgerufen wurde. In echten Tests würden Sie Assertions aus Ihrem Test-Framework verwenden.

4. Wichtige Methoden/Funktionen/Klassen

4.1. sinon.spy() – Der Spion

Signatur: sinon.spy([object], [method]) oder sinon.spy([func])

Funktion: Erstellt einen Spion, der Informationen über Funktionsaufrufe aufzeichnet: Anzahl der Aufrufe, Argumente, Kontext, Rückgabewert. Er kann eine vorhandene Funktion umschließen oder eine Methode eines Objekts ersetzen.

Beispiel:

const user = {
  setName: function(name) { this.name = name; }
};

const spy = sinon.spy(user, 'setName');
user.setName('John');

console.log(spy.calledOnce);      // true
console.log(spy.calledWith('John')); // true
console.log(spy.firstCall.args);  // ['John']

spy.restore(); // Originalmethode unbedingt wiederherstellen

4.2. sinon.stub() – Der Stub

Signatur: sinon.stub([object], [method])

Funktion: Erstellt einen Stub, der eine Funktion ersetzt und es ermöglicht, ihr Verhalten vorzugeben: Rückgab

Empfehlungen