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

How to test a generator function called using 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 Spy 来做到这一点。

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

当我这样做并检查间谍上的 callCount 时,它总是 returns 1。 但实际上,间谍多次通过并被调用。当我在我的 genFn 函数中检查调用计数时,它给出了正确的计数。

我敢肯定,我没有以正确的方式进行测试。有人可以给我一些关于如何测试的想法吗?谢谢

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

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