2016-08-15 65 views
0

這是一個真實的場景的簡化稱爲發生器功能:如何測試使用CO

我有一個名爲三個parameters.Two整數和一個函數發生器功能。第三個參數函數可以添加兩個整數。

//My add function 
var fn = (a,b)=>a+b; 

//My generator function 
var genFn = function*(a,b,fn){ 
b = yield fn(a,b); 
b = yield fn(a,b); 
return b; 
}; 

我還有一個功能,它包裝使用CO

//My wrapper function 
var coGen = (a,b,fn)=>{ 
    co(genFn.bind(null,a,b,fn)) 
}; 

在我的測試情況下,發電機的功能,我想知道有多少次我函數「FN」之稱。

我試圖通過使用sinon間諜來做到這一點。

var spy =sinon.spy(fn); 
coGen(1,2,spy); 

當我做到這一點,並檢查callCount的間諜,它總是返回1. 雖然在現實中,間諜獲得通過,並多次調用。當我在我的genFn函數中檢查呼叫計數時,它會給我正確的計數。

我相信,我沒有以正確的方式測試它。有人能給我一些關於如何測試的想法嗎?謝謝。

回答

0

我能解決它。這是一個愚蠢的錯誤。我不認爲很多人會犯這個錯誤。以防萬一,如果有人感興趣。 我測試的方式是錯誤的。 'co'返回一個承諾。在承諾的'已解決'方法中尋找callCount會給予間諜正確的callCount。

var spy =sinon.spy(fn); 
coGen(1,2,spy).then(()=>assert(spy.callCount===2));//true 
相關問題