Я пытаюсь использовать sinon, чтобы отключить некоторые функции simplegit. Проблема в том, что simplegit ведет себя очень раздражающе: require('simple-git')
возвращает функцию, которую нужно вызвать, чтобы получить действительно полезный объект. Результатом этого является то, что вы каждый раз получаете новый объект, делая заглушку синоном (обычный способ) невозможным.
Поэтому мне нужно заглушить функцию, возвращаемую require('sinon')
, чтобы я мог полностью переопределить поведение simplegit. По сути, я хочу сделать что-то вроде этого (но это не работает):
const sinon = require('sinon')
var simplegit = require('simple-git')
//I'm well aware that this isn't valid
sinon.stub(simplegit).callsFake(function() {
return {
silent: function() {return this},
pull: function() {console.log('pulled repo'); return this},
clone: function() {console.log('cloned repo'); return this}
}
}
external_function() //this function calls simplegit
Это приведет к созданию объекта, который имеет нужные мне функции, но ничего не делает. Он полностью избегает реальной реализации simplegit.
Возможно ли это сделать?
proxyquire
илиmock-require
? Похоже, что это те типы инструментов, которые мне нужны, но опять же, я могу понять, как заглушить, когда вызовrequire
возвращает объект, но проблема в том, чтоrequire('simple-git')
возвращает функцию, и я не могу это понять - person ewok   schedule 06.11.2017