Я пытаюсь использовать sinon, чтобы заглушить некоторые функции simplegit. Проблема в том, что simplegit ведет себя очень раздражающе: require('simple-git')
возвращает функцию, которую вам нужно вызвать, чтобы получить полезный объект. Результатом этого является то, что каждый раз вы получаете другой объект, делая невозможным выполнение синона (нормальный путь).
Поэтому мне нужно заглушить функцию, возвращаемую require('sinon')
, чтобы я мог переопределить bahavior of 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
Это приведет к объекту, который имеет нужные мне функции, но ничего не делает. Это полностью исключает реальную реализацию простой версии.
Возможно ли это сделать?
Поскольку вы используете Jest, это легко и даже не требует Sinon. Вы можете просто использовать jest.mock, например:
jest.mock('simple-git', () => function() {
return {
silent: function() {return this},
pull: function() {console.log('pulled repo'); return this},
clone: function() {console.log('cloned repo'); return this}
}
})
→ См. Документацию Jest
Когда я учился использовать Jest, я создал репозиторий GitHub с примером кода, возможно, они вам полезны:
require('simple-git')
прежнему возвращает функцию, но эта функция ничего не возвращает, а не объект с проверенными функциями