Ausspionieren eines Konstruktors in JavaScript mit Sinon
Ich versuche zu erstellen, die ein Spion in einem Konstruktor, und sehen, ob es aufgerufen wird -- hier sind meine tests.
Ich bin mit der sinon-chai, so dass die syntax gültig ist, aber beide tests scheitern.
var foo = function(arg) {
};
var bar = function(arg) {
var baz = new foo(arg);
};
it('foo initialized inside of this test', function() {
var spy = sinon.spy(foo);
new foo('test');
expect(spy).to.be.called;
expect(spy).to.be.calledWith('test');
});
it('foo initialized by bar()', function() {
var spy = sinon.spy(foo);
bar('test');
expect(spy).to.be.called;
expect(spy).to.be.calledWith('test');
});
InformationsquelleAutor der Frage billy | 2013-02-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist, dass Sinon nicht weiß, was Bezug zu bespitzeln, so die Lösung ist entweder ein Objekt verwenden, d.h.
sinon.spy(namespace, 'foo')
oder überschreiben Sie die Referenz selbstfoo = sinon.spy(foo)
.InformationsquelleAutor der Antwort billy
Unter Berücksichtigung der Konstruktor gebunden ist "Fenster", was bedeutet, dass, wenn Sie öffnen Sie die Entwickler-Konsole in Ihrem browser, Sie sollten in der Lage sein, um intantiate Sie ein Objekt mit der zugehörigen Funktion/Konstruktor:
Wenn dem so eigentlichen code könnte sein:
InformationsquelleAutor der Antwort stckvflw
In den Fall, Sie wollen verwenden Sie diese auf Knoten, @stckvflw Antwort angepasst werden kann, vorausgesetzt, Sie kennen den namespace der Konstruktor so wie @billy erwähnt. Für JS-built-in-Klassen, Sie werden wahrscheinlich Recht, zu vermuten, dass Sie Leben in
global
.Einem konkreten Beispiel mit
chai-spies
einfrieren derDate
Objekt (entspricht der Erstellung einerstub
mit Sinon):InformationsquelleAutor der Antwort villasv