Макет всего модуля, но с сохранением оригинальной логики модуля. Аналогично jest.spyOn
поведению по умолчанию, когда вызывается оригинальный метод.
Использование jest.mock
позволяет выполнить необходимые утверждения, но не выполняет исходную логику, и иногда я хочу, чтобы эта логика была выполнена.
Использование jest.spyOn
позволяет утверждать и может выполнять оригинальную логику, но только для именованных экспортов модуля, что обычно полезно, но не тогда, когда метод экспортируется по умолчанию или как в примере кода ниже.
// moduleToMock.js
function doSomething(..args) {...}
doSomething.myWay = function myWay(...args) {...}
module.exports = doSomething
// moduleUsingModuleToMock.js
const doSomething = require('moduleToMock')
function doManyThings() {
doSomething(...)
doSomething.myWay(...)
}
module.exports = {
doManyThings,
}
// moduleUsingModuleToMock.test.js
// --
// some way to mock `moduleToMock` that still executes original logic
// --
const doSomething = require('moduleUsingModuleToMock')
it('correctly does many things', () => {
doManyThings()
expect(doSomething).toBeCalledWith(...)
expect(doSomething.myWay).toBeCalledWith(...)
})
Может быть, я упустил что-то простое, но пока что документы или гугл-фу не дали никаких результатов.