jest.spyOn эквивалент для jest.mock - PullRequest
0 голосов
/ 23 января 2019

Макет всего модуля, но с сохранением оригинальной логики модуля. Аналогично 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(...)
})

Может быть, я упустил что-то простое, но пока что документы или гугл-фу не дали никаких результатов.

1 Ответ

0 голосов
/ 23 января 2019

Нет способа издеваться над модулем и шпионить за его методами.Причина в том, что шутка действительно заменяет модуль на макет.

...