2012-05-14 15 views
11

我試圖存根如下:如何存根事件發射器與Sinon.js

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

我只是想調用回調如果第一個參數是「完整」。

我測試的功能還包括:

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

所以我不能只是不產生原因,將火無論是完整和錯誤回調。

如果我不使用sinon,我會通過寫下以下內容來僞造它。

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

你能顯示包含此功能的更完整示例? –

回答

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'); 
} 
7

您可以縮小其下有yield時通過將其與withArgs像這樣結合的情況下...

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