这是对现实世界场景的简化:
我有三个参数调用的生成器函数。两个整数和一个函数。第三个参数函数可以添加两个整数。
//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 Spy来做到这一点。
var spy =sinon.spy(fn);
coGen(1,2,spy);
当我这样做并在间谍上检查callCount时,它总是返回1。 虽然实际上,间谍已经过多次并被召唤。当我在 genFn 功能中检查通话计数时,它会给我正确的计数。
我确信,我没有以正确的方式测试它。有人可以给我一些关于如何测试的想法吗?感谢。
答案 0 :(得分:0)
我能够解决它。这是一个愚蠢的错误。我不认为很多人会犯这个错误。以防万一,如果有人感兴趣的话。 我测试的方式是错误的。 'co'返回一个承诺。在promise的'已解决'方法中查找callCount将给出间谍的正确callCount。
var spy =sinon.spy(fn);
coGen(1,2,spy).then(()=>assert(spy.callCount===2));//true