我正在使用Jest模拟模块,因为它包含不应在测试中运行的代码。但是从输出中我可以看到模块 中的代码正在运行。
// foo.js
console.log('Hello')
// test.js
jest.mock('./foo')
const foo = require('./foo')
test.todo('write some tests')
控制台输出
PASS test.js
✎ todo 1 test
console.log foo.js:1
Hello
这是怎么回事?
答案 0 :(得分:0)
这使我绊了好几次。
如果不向jest.mock
提供模拟实现,它将返回一个对象,该对象镜像模拟模块的输出,但每个函数都被模拟jest.fn()
替换。这很整洁,因为通常它是您想要的。但是,为了确定模块的导出,必须首先require
。这就是导致console.log
运行的原因。
两种可能的解决方案:
jest.mock('./foo', () => {})