Jest覆盖率测试未纳入rewire文件,如何配置解决?
问题描述
我用rewire函数把未导出的函数A加入Jest单元测试,但跑覆盖率测试时这个函数没被统计到。想知道有没有办法让rewire处理的文件纳入覆盖率统计?是否需要在babel.config.json里做相关配置?当前配置如下:
{ "presets": ["@babel/preset-env"], "plugins": ["babel-plugin-rewire"] }
解决方案
给babel-plugin-rewire加覆盖率兼容参数
babel-plugin-rewire修改代码结构时,可能会干扰Jest的覆盖率插桩逻辑。你可以在Babel配置里给插件添加参数,让它在覆盖率模式下保留统计所需的代码标记:
修改babel.config.json为:{ "presets": ["@babel/preset-env"], "plugins": [ ["babel-plugin-rewire", { "disableRewireFor": ["coverage"] }] ] }调整Jest的覆盖率配置
在jest.config.js里指定用Babel处理覆盖率,避免和rewire工具冲突:module.exports = { collectCoverage: true, collectCoverageFrom: [ "src/**/*.js" // 替换成你实际需要统计的文件路径 ], coverageProvider: "babel" };这里
coverageProvider: "babel"是关键,它让Jest依赖Babel来完成代码插桩和覆盖率收集,和rewire的兼容性更好。换个方式暴露未导出函数(可选)
如果上面的配置还是不生效,可以不用rewire,直接在被测试文件里加条件导出,只在测试环境暴露函数A:// 被测试文件代码 function A() { /* 函数逻辑 */ } // 仅在测试环境导出 if (process.env.NODE_ENV === "test") { module.exports.A = A; }这种方式不需要依赖rewire工具,Jest能直接识别并统计函数A的覆盖率,配置更简单。
内容的提问来源于stack exchange,提问作者Евгения Гребенюк
相关产品推荐
相关产品推荐

