Stubbing und/oder Verspottung einer Klasse, in der sinon.js?
Habe ich einen Datenbank-wrapper für meine Anwendung, wie unten gezeigt. Um es zu testen, bin ich natürlich gerne zu ersetzen, die die eigentlichen Datenbank-Bibliothek. Ich könnte eine neue Klasse erstellen, verhöhnt die query
- Methode und fangen Sie alle-input, aber mit sinon.js
scheint besser geeignet, aber wie kann ich es nutzen?
Ist die mock
oder stub
Funktionen sinon.js
was sollte ich verwenden?
wrapper = (function() {
function wrapper() {}
wrapper.db = require("database");
wrapper.prototype.insertUser = function(doc) {
return this.db.query("INSERT INTO USERS...");
};
return wrapper;
})();
InformationsquelleAutor Industrial | 2012-10-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kannst du beides verwenden.
Mock haben eine erwartete bestellten Verhalten, dass, wenn nicht korrekt befolgt, wird Ihnen eine Fehlermeldung.
Einen Stub ist ähnlich wie ein spotten, aber ohne die Bestellung, so rufen Sie Ihre Methoden, wie Sie wollen.
In meiner Erfahrung, die Sie fast nie brauchen eine mock.
Beide ersetzen Sie die Methode für eine leere Methode, oder eine Schließung, wenn Sie passieren.
Es wäre so etwas wie dieses:
Dann fügen Sie das erwarten Verhalten zu überprüfen, wenn es passiert ist.
Möchte ich Jasmin mit Jasmin-Sinon für die überprüfung der tests.
insertUser
- Methode, anstatt diethis.db
-Aufruf, derinsertUser
?Hängt davon ab, was du testen, aber wenn Sie wollen, um zu testen, ob die insertUser ist das einfügen in die DB, wäre ein integration test und keine Lunte sparen würde Sie aus über die wirkliche Logik mit einigen in-memory-DB, "fake" eine Oracle zum Beispiel, wenn Sie möchten, um zu testen, ob die insertUser wird aufgerufen, wenn benötigt, dann stubbing insertUser Methode ein Weg sein könnte, es zu tun...
Als der 3.0 wäre dies jetzt
stub = sinon.stub(wrapper , 'insertUser ').callsFake( function () { return true; });
stub(obj, 'meth', fn) entfernt wurde, siehe Dokumentation
InformationsquelleAutor Cristiano Fontes
Zuerst möchte ich ändern Sie Ihre Klassendefinition ein wenig (groß-Klasse-name und fix db-Zuordnung):
Stub die ganze Klasse:
sinon.createStubInstance
erstellt eine Instanz der Wrapper-wo jeder Methode ist ein stub.sinon.spy
wird es uns ermöglichen, Spion der Klasse Instanziierung.So könnte man es wahrnehmen, wie diese:
(assertions verwenden chai und sinon-chai)
Sagte ich nur "übung", weil dieser code-snippet ist nicht eine tatsächliche Einheit testen. Instanziierung und Methodenaufrufe werden durch Ihr Motiv im test.
Nun, wenn Sie wollen, zu verhöhnen, eine Abhängigkeit injiziert durch require () wie die
db = require('database')
in Ihrem Beispiel–, die Sie könnten versuchen, ein Test-tool, wie entweder Scherz (aber nicht mit sinon) oder sinonquire, die ich erstellt, inspiriert durch Scherz aber, um es mit sinon plus Ihre Lieblings-Test-tool (bei mir ist Mokka). Intern, sinonquire verwendet die gleiche Technik, die oben gezeigt kombinierensinon.spy
undsinon.createStubInstance
zu stub-Klasse.InformationsquelleAutor Ricardo Stuven