2013-02-10 14 views
17

Ich versuche, einen Spion auf einem Konstruktor zu erstellen, und sehen, ob es aufgerufen wird - unten sind meine Tests. Ich benutze Sinon-Chai, so dass die Syntax gültig ist, aber beide Tests fehlschlagen.Ausspionieren eines Konstruktors in JavaScript mit Sinon

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'); 
}); 
+0

ähnliche Frage + anwser: https://stackoverflow.com/questions/32338427/spying-on-date-constructor-with-sinon?rq=1 – Gyuri

Antwort

5

Das Problem ist, dass Sinon nicht weiß, welcher Bezug auf auszuspionieren, so dass die Lösung ist entweder ein Objekt zu verwenden, das heißt sinon.spy(namespace, 'foo') oder überschreibt die Referenz selbst foo = sinon.spy(foo).

+9

können Sie nach die korrigierten Tests? – user1736947

4

Konstruktor Betrachtet wird ‚Fenster‘ gebunden, was bedeutet, dass, wenn Sie offene Entwickler-Konsole auf Ihrem Browser, sollten Sie in der Lage sein, ein Objekt intantiate durch die entsprechende Funktion/Baumeister als solche mit:

var temp = new FunctionName(); 

wenn ja eigentlicher Code Arbeits könnte sein:

var jamesBond = sinon.spy(window, 'FunctionName'); 
var temp = new FunctionName(args); 

expect(jamesBond.called).to.be.equal(true); 
+1

Danke! Ich war auf der Suche nach einer Möglichkeit, dies für eine lange Zeit zu tun! – ardal

Verwandte Themen