如何使用Sinon.js存根事件发射器

Pic*_*els 12 javascript mocking stub sinon

我试图存根以下内容:

on('complete', function(data){ });
Run Code Online (Sandbox Code Playgroud)

如果第一个参数是'complete',我只想调用回调函数.

我正在测试的功能还包括:

on('error', function(data){ });
Run Code Online (Sandbox Code Playgroud)

因此,我不能仅仅执行yield会导致完成和错误回调.

如果我不使用sinon,我会通过编写以下内容来伪造它.

var on = function(event, callback){
  if (event === 'complete'){
    callback('foobar');
  };
};
Run Code Online (Sandbox Code Playgroud)

phi*_*ain 8

你可以yield通过结合它来缩小发生情况的范围withArgs......

on.withArgs('complete').yields(valueToPassToCompleteCallback);
on.withArgs('error').yields(valueToPassToErrorCallback);
Run Code Online (Sandbox Code Playgroud)


And*_*rle 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');
}
Run Code Online (Sandbox Code Playgroud)