2015-04-22 39 views

回答

14

在你的情況,你是想看看是否bar被調用,所以你想窺探bar而比foo

doc描述:

function bar(x,y) { 
    console.debug(x, y); 
} 
function foo(z) { 
    bar(z, z+1); 
} 
// Spy on the function "bar" of the global object. 
var spy = sinon.spy(window, "bar"); 

// Now, the "bar" function has been replaced by a "Spy" object 
// (so this is not necessarily what you want to do) 

foo(1); 

bar.getCall(0).args => should be [1,2] 

現在,刺探功能強夫婦的「富」和它的實現測試的內部,所以你會落入平常"mockist vs classical"辯論。

+8

根據[文檔](http://sinonjs.org/docs)它應該是'getCall(0)'而不是'getCalls(0)' –

1

你不是應該刺探吧,而不是富?

var spy = sinon.spy(bar) 

調用foo:

foo() 

回杆被稱爲:

console.log(spy.calledOnce) 
+0

這個答案在技術上是錯誤的。你不能[以這種方式使用'spy()](https://github.com/sinonjs/sinon/blob/v2.3.6/lib/sinon/spy.js#L19) - 它需要一個對象和一個方法名稱作爲參數1和2(2015年舊版本也是如此)。如果只用一個函數調用它[創建一個以傳遞的名字命名的匿名間諜函數](https://github.com/sinonjs/sinon/blob/v2.3.6/lib/sinon/spy.js#L135)並返回它,通過的參考不會改變。 –

4

我同意阿德里安的說法,你可能想要監視酒吧。

var barSpy = sinon.spy(bar); 

然後檢查它被稱爲一次

assert(barSpy.calledOnce); 

在次

assert.equal(barSpy.callCount, x); 

所有

assert(barSpy.called) 

稱爲X量剛剛打電話如果你想提取來自第一次電話會議的論點他間諜:

var args = barSpy.getCalls()[0].args 

然後,你可以做你想要的那些參數。

+0

這個答案在技術上是錯誤的。你不能[以這種方式使用'spy()](https://github.com/sinonjs/sinon/blob/v2.3.6/lib/sinon/spy。js#L19) - 它將一個對象和一個方法名稱作爲參數1和2(2015年舊版本也是如此)。如果只用一個函數調用它[創建一個以傳遞的名字命名的匿名間諜函數](https://github.com/sinonjs/sinon/blob/v2.3.6/lib/sinon/spy.js#L135)並返回它,通過的參考不會改變。 –

相關問題