Как шпионить за импортированной функцией с помощью Sinon?
Допустим, мы хотим проверить, что определенная функция вызывается другой функцией, использующей Sinon.
fancyModule.js
export const fancyFunc = () => {
console.log('fancyFunc')
}
export default const fancyDefault = () => {
console.log('fancyDefault')
fancyFunc()
}
fancyModule.test.js
import sinon from 'sinon'
import fancyDefault, { fancyFunc } from '../fancyModule'
describe('fancyModule', () => {
it('calls fancyFunc', () => {
const spy = sinon.spy(fancyFunc)
fancyDefault()
expect(spy.called).to.be.true
})
})
Когда я запускаю этот тест, фактическое значение всегда ложно. Также оригинальная функция fancyFunc()
вызывается (выводит fancyFunc) вместо насмешки.
2 ответа
Вы можете изменить стиль импорта и импортировать свой модуль как объект
import sinon from 'sinon'
import * as myModule from '../fancyModule'
describe('fancyModule', () => {
it('calls fancyFunc', () => {
const spy = sinon.spy(myModule, 'fancyFunc');
myModule.fancyDefault()
expect(spy.called).to.be.true
})
})
Вы должны использовать https://github.com/speedskater/babel-plugin-rewire/
import sinon from 'sinon'
import fancyDefault, { __RewireAPI__ } from '../fancyModule'
describe('fancyModule', () => {
it('calls fancyFunc', () => {
const spy = sinon.spy()
__RewireAPI__.__Rewire__('fancyFunc', spy)
fancyDefault()
expect(spy.called).to.be.true
})
})
Также проверьте пример: https://github.com/speedskater/babel-plugin-rewire