Jest收集未测试JSON文件覆盖率报错,除忽略文件外有无更好解决方案?
问题原因说明
这不是Jest的Bug,问题出在你自定义的JSON转换逻辑不符合要求。
你当前的jsonTransform直接返回JSON原始内容,而裸的JSON字符串不是合法的可执行JS代码。Jest的覆盖率收集工具处理文件前会先过transform,但转换后的输出必须是合法的JS语法才能被解析,你返回的裸JSON会被当成JS执行,自然会抛出缺少分号的语法错误。
解决方案
场景1:不需要收集JSON文件的覆盖率
最优方案是直接在collectCoverageFrom规则中限定只收集业务代码文件,从源头过滤掉不需要统计覆盖率的文件类型,示例配置:
collectCoverageFrom: ['<rootDir>/**/*.{js,jsx,ts,tsx}'], // 按需添加你需要统计的后缀
这种方案比把JSON加到coveragePathIgnorePatterns性能更好,也更易维护,不用后续新增JSON后缀相关的忽略规则。
场景2:确实需要统计JSON文件的覆盖率
只需要修改你的jsonTransform.js的转换逻辑,把JSON内容包裹成合法的JS模块导出即可,示例修改:
module.exports = { process(src) { // CommonJS规范输出,ESM项目可以改成 `export default ${src};` return `module.exports = ${src};`; }, };
修改后转换输出的是合法JS代码,覆盖率工具就能正常解析不会报错。
内容的提问来源于stack exchange,提问作者chipit24
相关产品推荐
相关产品推荐

