如何测试使用CO调用的生成器函数

时间:2016-08-15 15:06:58

标签: javascript unit-testing mocha sinon

这是对现实世界场景的简化:

我有三个参数调用的生成器函数。两个整数和一个函数。第三个参数函数可以添加两个整数。

//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 功能中检查通话计数时,它会给我正确的计数。

我确信,我没有以正确的方式测试它。有人可以给我一些关于如何测试的想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

我能够解决它。这是一个愚蠢的错误。我不认为很多人会犯这个错误。以防万一,如果有人感兴趣的话。 我测试的方式是错误的。 'co'返回一个承诺。在promise的'已解决'方法中查找callCount将给出间谍的正确callCount。

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