sinon: заглушить функцию, которая не привязана к объекту

1

Я пытаюсь использовать 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

Это приведет к объекту, который имеет нужные мне функции, но ничего не делает. Это полностью исключает реальную реализацию простой версии.

Возможно ли это сделать?

  • 0
    Существуют различные инструменты, которые делают это возможным, например , макет требуют , издевательство , proxyquire , столпотворение-плагин-ReWire . Я бы порекомендовал mock-require , это то, что я использовал, прежде чем перейти с Mocha на Jest
  • 0
    Я на самом деле использую шутку. Похоже, вы говорите, что Jest имеет встроенный способ сделать это?
Показать ещё 2 комментария
Теги:
unit-testing
sinon
stub

1 ответ

1
Лучший ответ

Поскольку вы используете 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 с примером кода, возможно, они вам полезны:

https://github.com/pahund/hello-jest

  • 0
    при использовании require('simple-git') прежнему возвращает функцию, но эта функция ничего не возвращает, а не объект с проверенными функциями
  • 0
    Трудно сказать, почему это не работает для вас, не видя ваш код. Возможно, вы можете привести минимальный пример?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню