我偶然发现,在开玩笑之后,笑话仍然执行模块。在我的情况下有副作用(echarts + zrender)。
crashingModule.js:
throw 'Module is executed';
foo = () => {
return 'boom';
}
module.exports = foo;
crashingModule.test.js:
const foo = require('./crashingModule');
jest.mock('./crashingModule');
结果:
●测试套件无法运行
Error Module is executed
那是因为即使在嘲笑Jest的内部,run module也是如此。
是否有可能以某种方式跳过jest.mock()模拟的模块的执行?
当前解决方法:
我想出了一个包装纸:
const echarts = require('echarts');
const zrenderUtil = require('zrender/lib/core/util');
module.exports = {
echarts: echarts,
zrenderUtil: zrenderUtil
}
然后将哪个导入到我们的模块中以及对该模块的测试中。这样,当Jest模拟包装器时,就不会执行echarts。仅运行包装器模块,没有副作用。