【发布时间】:2019-06-16 13:46:17
【问题描述】:
模拟整个模块,但保留原始模块逻辑。类似于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(...)
})
也许我错过了一些简单的事情,但到目前为止 docs 或 google fu 还没有产生任何结果。
【问题讨论】:
标签: javascript mocking jestjs spy