如何使用Sinon.js对事件发射器进行桩测试

15
我正在尝试存根以下内容:
on('complete', function(data){ });

我只想在第一个参数为'complete'时调用回调函数。

我要测试的函数还包含:

on('error', function(data){ });

我不能只使用 yield,因为那样会触发完成和错误回调。

如果我不使用 sinon,我会编写以下内容来进行伪造。

var on = function(event, callback){
  if (event === 'complete'){
    callback('foobar');
  };
};

2
你能展示一下包含这个函数的更完整的例子吗? - Oved D
2个回答

9

您可以通过将yieldwithArgs组合使用来缩小其发生的条件,方法如下:

on.withArgs('complete').yields(valueToPassToCompleteCallback);
on.withArgs('error').yields(valueToPassToErrorCallback);

0

也许你可以使用spyCall

var spy = sinon.spy(window, 'on');
on('error', function(data){ });
on('complete', function(data){ });
for(var i=0; i < spy.callCount; i++){
    var call = spy.getCall(i);
    if(call.args[0] === 'complete') call.args[1]('foobar');
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接