2013-02-10 8 views
17

Próbuję utworzyć szpiega na konstruktorze i sprawdzić, czy zostanie on wywołany - poniżej znajdują się moje testy. Używam sinon-chai, więc składnia jest poprawna, ale oba testy kończą się niepowodzeniem.Szpiegostwo na konstruktorze w javascript z sinonem

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

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

Odpowiedz

5

Problemem jest to, że Sinon nie wie, co odniesienie do szpiegowania, więc rozwiązaniem jest użyć obiektu tj sinon.spy(namespace, 'foo') lub nadpisać odniesienie się foo = sinon.spy(foo).

+9

można dodawać skorygowane testy? – user1736947

4

Biorąc pod uwagę swój konstruktor jest zobowiązany do „okna”, co oznacza, że ​​jeśli otwarta konsola deweloper w przeglądarce, powinieneś być w stanie intantiate obiektu za pomocą powiązanych funkcji/konstruktora jako takie:

var temp = new FunctionName(); 

Jeśli więc rzeczywisty kod roboczych mogą być:

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

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

Dziękujemy! Szukałem sposobu, aby to zrobić przez długi czas! – ardal

Powiązane problemy