Tam*_*lyn 5 javascript mocking node-modules jestjs
我正在使用 Jest 模拟一个模块,因为它包含不应在测试中运行的代码。不过,我可以从输出模块中的代码中看到的是正在运行。
// foo.js
console.log('Hello')
// test.js
jest.mock('./foo')
const foo = require('./foo')
test.todo('write some tests')
Run Code Online (Sandbox Code Playgroud)
控制台输出
PASS test.js
? todo 1 test
console.log foo.js:1
Hello
Run Code Online (Sandbox Code Playgroud)
那是怎么回事?
这让我绊倒了几次。
如果您不提供模拟实现,jest.mock它将返回一个对象,该对象反映模拟模块的导出,但每个函数都替换为 mock jest.fn()。这非常整洁,因为它通常是您想要的。但是为了确定模块的出口,它必须首先require它。这就是导致console.log运行的原因。
两种可能的解决方案:
jest.mock('./foo', () => {})