2013-02-10 10 views
17

Sto cercando di creare una spia su un costruttore e vedere se viene chiamato - di seguito sono i miei test. Sto usando sinon-chai quindi la sintassi è valida, ma entrambi i test falliscono.Spiare un costruttore in javascript con sinone

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

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

risposta

5

Il problema è che Sinon non sa cosa riferimento a spiare, per cui la soluzione è usare sia ad un oggetto cioè sinon.spy(namespace, 'foo') o ignorare il riferimento da soli foo = sinon.spy(foo).

+9

Puoi pubblicare i test corretti? – user1736947

4

Considerando il tuo costruttore è tenuto a 'finestra' che significa che se si console sviluppatore aperta sul vostro browser, si dovrebbe essere in grado di intantiate un oggetto utilizzando la relativa funzione di/costruttore in quanto tale:

var temp = new FunctionName(); 

Se il codice di lavoro in modo effettivo potrebbe essere:

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

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

Grazie! State cercando un modo per farlo da molto tempo! – ardal

Problemi correlati