2013-02-10 70 views
17

我想在構造函數上創建一個間諜,並查看它是否被調用 - 下面是我的測試。 我正在使用sinon-chai,所以語法是有效的,但是兩個測試都失敗了。在sinon上的javascript中偵聽構造函數

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

類似問題+ Anwser:https://stackoverflow.com/questions/32338427/spying-on-date-constructor-with-sinon?rq=1 – Gyuri 2017-09-18 22:05:16

回答

5

的問題是,興農不知道窺探什麼參考,所以解決方法是使用一個對象即sinon.spy(namespace, 'foo')或自己foo = sinon.spy(foo)覆蓋參考。

+9

您可以發佈修正的測試? – user1736947 2015-02-14 02:22:37

4

考慮到你的構造函數,勢必「窗口」,這意味着,如果你在你的瀏覽器中打開開發者控制檯,你應該能夠通過使用相關功能/構造函數這樣來intantiate對象:

var temp = new FunctionName(); 

如果是實際工作的代碼可能是:

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

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

謝謝!一直在尋找一種方法來做這個很長一段時間! – ardal 2016-09-26 07:08:29