Verwenden sinon.js erstellen Sie eine "spy-Objekt" mit den Spionage-Methoden, basierend auf einem echten Konstruktor/Prototyp

Ich bin mit sinon.js als ein Weg, um auszudrücken, Abhängigkeiten in meinem Mokka tests. Ich bevorzuge die "Spion" - Ansatz über ein klassisches mock-Ansatz, da der Introspektion, der Spion scheint klarer und bietet mehr Flexibilität als das eher rückwärts-denken mit klassischen mock-Objekte.

Sagte, ich Frage mich, wenn ich es falsch wenn es um die Erstellung von test-Spione für die ganze Objekte. Sagen wir, ich habe einen test-Abhängigkeit, die 4 Methoden auf, und ich will stub-jeder von diesen Methoden und stellen Behauptungen auf ein oder zwei von Ihnen. Zurzeit mache ich das:

var spyObj = {
  aMethod: sinon.spy(),
  otherMethod: sinon.spy(),
  whatever: sinon.spy()
};

Dann kann ich nur bitten, Dinge wie spyObj.aMethod.calledWith(a, b, c).

Gibt es eine bessere Art und Weise zu verspotten, sich eine ganze Klasse, als Wiederholung der Namen der Methoden in der test-suite selbst? Es sieht aus wie sinon.stub() versucht zu iterieren über alle, die Mitglied eines bestimmten Objekts, aber das scheint nicht zu funktionieren als ein Weg, um alle Methoden für die meisten Objekte in der modernen JS-Laufzeitumgebungen wie V8, es sei denn, der Gegenstand ist tatsächlich etwas, das Durchlaufen werden. Es wird auch versucht, monkey patch das eigentliche Objekt, anstelle der Rückgabe eine gleichwertige, die etwas unerwünscht. Ich brauche nur ein Objekt, das entspricht eine Schnittstelle, verhält sich aber wie ein null-Objekt, es sei denn, ich sage es anders.

Wäre es gut, um in der Lage sein, etwas zu tun:

var spyObject = sinon.spy(MyClass.prototype);

Wie findet man alle Methoden, Konstruktor/Prototyp Node.js, um einen wrapper, wie das oben?

Dies ist mehr über die Lunte aus der Logik, der über die Prüfung der Anrufung auf viele Methoden (die ich versuche zu begrenzen, oder im Notfall auch zwei). Zum Beispiel, dass Dinge, die tun könnten, unerwünschte I/O, oder erfordern zusätzliche aufwendige Leuchten, wenn ausgeführt.

InformationsquelleAutor d11wtq | 2012-08-19
Schreibe einen Kommentar