自 Jest 25 以来,覆盖率报告有了不同的来源路径
Since Jest 25, coverage reports are having a different source path
我是 运行 一个 Angular 项目,带有 @nrwl/nx 设置和用于单元测试的 Jest。我已将 Jest 配置为为每个应用程序和库生成 lcov 文件,然后由 SonarQube Scanner 获取这些文件以报告测试覆盖率。每个库都是它自己的 Sonar 模块。
最近我将我的 Jest 版本从 24.1.0 更新到 25.1.0。从那时起,我在 SonarQube 中的覆盖率始终为 0%,因为扫描仪无法找到文件:
WARN: Could not resolve 1 file paths in [/mnt/c/Users/Patrick/Projects/projectname/apps/projectname/../../coverage/apps/projectname/lcov.info], first unresolved path: apps/projectname/src/environments/environment.ts
我分析了两个版本的 lcov 文件,发现生成的路径发生了变化。
Jest 25.1(不工作)
SF:apps/projectname/src/environments/environment.ts
Jest 24.1(有效)
SF:/mnt/c/Users/Patrick/Projects/projectname/apps/projectname/src/environments/environment.ts
当我手动将其更改为以下内容时,这也有效:
SF:src/environments/environment.ts
但现在我有点卡住了,因为我没有找到告诉 Jest 以旧方式生成路径或告诉 Sonar 现在路径不同的方法。
我遇到了完全一样的问题!我通过在测试执行后执行一个脚本来解决它,该脚本将通过将相对路径转换为绝对路径 (process.cwd()) 来修改 lcov.info。现在 SonarQube 中的 CC 再次显示:)
const project = `name-of-your-project`;
const file = `./${project}/jest/coverage/lcov.info`;
fs.readFile(file, 'utf8', function (err,data) {
if (err) {
return console.error(err);
}
const result = data.replace(/src/g, `${process.cwd()}/${project}/src`);
fs.writeFile(file, result, 'utf8', function (err) {
if (err) return console.error(err);
});
});
我解决了将 "coverageReporters" 配置从根文件夹的 "jest.config.js" 移动到项目文件夹的 "jest.config.ts",并且在 lcov 配置中我设置:
coverageReporters: ['html', ["lcovonly", {"projectRoot": __dirname}], 'text-summary'],
将 projectRoot 设置为 __dirname 使 "SF" 路径再次成为相对路径。
我有同样的问题!我用这个解决了:
coverageReporters: ["json", ["lcov", {"projectRoot": "../../"}]]
like jest 配置文档
https://jestjs.io/docs/configuration#coveragereporters-arraystring--string-options
加回 "../../" 所有你需要的。
我是 运行 一个 Angular 项目,带有 @nrwl/nx 设置和用于单元测试的 Jest。我已将 Jest 配置为为每个应用程序和库生成 lcov 文件,然后由 SonarQube Scanner 获取这些文件以报告测试覆盖率。每个库都是它自己的 Sonar 模块。
最近我将我的 Jest 版本从 24.1.0 更新到 25.1.0。从那时起,我在 SonarQube 中的覆盖率始终为 0%,因为扫描仪无法找到文件:
WARN: Could not resolve 1 file paths in [/mnt/c/Users/Patrick/Projects/projectname/apps/projectname/../../coverage/apps/projectname/lcov.info], first unresolved path: apps/projectname/src/environments/environment.ts
我分析了两个版本的 lcov 文件,发现生成的路径发生了变化。
Jest 25.1(不工作)
SF:apps/projectname/src/environments/environment.ts
Jest 24.1(有效)
SF:/mnt/c/Users/Patrick/Projects/projectname/apps/projectname/src/environments/environment.ts
当我手动将其更改为以下内容时,这也有效:
SF:src/environments/environment.ts
但现在我有点卡住了,因为我没有找到告诉 Jest 以旧方式生成路径或告诉 Sonar 现在路径不同的方法。
我遇到了完全一样的问题!我通过在测试执行后执行一个脚本来解决它,该脚本将通过将相对路径转换为绝对路径 (process.cwd()) 来修改 lcov.info。现在 SonarQube 中的 CC 再次显示:)
const project = `name-of-your-project`;
const file = `./${project}/jest/coverage/lcov.info`;
fs.readFile(file, 'utf8', function (err,data) {
if (err) {
return console.error(err);
}
const result = data.replace(/src/g, `${process.cwd()}/${project}/src`);
fs.writeFile(file, result, 'utf8', function (err) {
if (err) return console.error(err);
});
});
我解决了将 "coverageReporters" 配置从根文件夹的 "jest.config.js" 移动到项目文件夹的 "jest.config.ts",并且在 lcov 配置中我设置:
coverageReporters: ['html', ["lcovonly", {"projectRoot": __dirname}], 'text-summary'],
将 projectRoot 设置为 __dirname 使 "SF" 路径再次成为相对路径。
我有同样的问题!我用这个解决了:
coverageReporters: ["json", ["lcov", {"projectRoot": "../../"}]]
like jest 配置文档 https://jestjs.io/docs/configuration#coveragereporters-arraystring--string-options
加回 "../../" 所有你需要的。