2014-03-28 40 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