2014-03-28 43 views
14

我想拦截与Sinon.js的调用,以便我可以执行一些日志记录,然后执行原始调用。我没有看到用sinon.spy()做到这一点,但我认为我可以用sinon.stub()来做到这一点。从Sinon.js调用原始函数存根

我提供的自定义功能:

sinon.stub(servicecore.ServiceWrapper.prototype, '_invoke', function(method, name, body, headers, callback) { 
    console.log('---- ServiceWrapper._invoke called! ----'); 

// How do I call the original function? 

}); 

我正在执行原有功能的问题,所以我的应用程序行为相同。任何想法?

回答

15

你可以使用闭包。例如:

var obj = { 
    foo: function() { 
     console.log('foo'); 
    } 
}; 

var stub = (function() { 
    var originalFoo = obj.foo; 
    return sinon.stub(obj, 'foo', function() { 
     console.log('stub'); 
     originalFoo(); 
    }); 
}()); 

JSFiddle

+1

谢谢!在[Sinonjs github](https://github.com/cjohansen/Sinon.JS/pull/278#issuecomment-34047017)中发现了此评论,并对其进行了解释。 – johnkchiu

+1

谢谢。我想你可能需要做'var originalFoo = obj.foo.bind(obj)' – Eliot