Вызов оригинальной функции из Sinon.js Stub
Я пытаюсь перехватить вызов с Sinon.js, поэтому я могу выполнить некоторое ведение журнала, а затем выполнить оригинальный вызов. Я не вижу способа сделать это с помощью sinon.spy(), но я думаю, что могу сделать это с помощью sinon.stub().
Я предоставил пользовательскую функцию:
sinon.stub(servicecore.ServiceWrapper.prototype, '_invoke', function(method, name, body, headers, callback) {
console.log('---- ServiceWrapper._invoke called! ----');
// How do I call the original function?
});
Проблема, которую я выполняю, заключается в выполнении исходной функции, поэтому мое приложение ведет себя одинаково. Любая идея?
Ответы
Ответ 1
Вы можете использовать закрытие. Например:
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
Ответ 2
Sinon хранит ссылку на исходную функцию в свойстве wrappedMethod
заглушки. Это можно вызвать в фальшивом методе.
sinon.stub(Array.prototype, 'sort').callsFake(
function () {
console.log('sorting array ${this}');
return Array.prototype.sort.wrappedMethod.apply(this, arguments);
}
);
const array = ['C', 'A', 'B'].sort();
console.log('sorted array is ${array}');
<script src="https://cdnjs.cloudflare.com/ajax/libs/sinon.js/7.3.2/sinon.min.js"></script>