自 Jest 25 以来,覆盖率报告具有不同的源路径

Posted

技术标签:

【中文标题】自 Jest 25 以来,覆盖率报告具有不同的源路径【英文标题】:Since Jest 25, coverage reports are having a different source path 【发布时间】:2020-06-04 23:16:51 【问题描述】:

我正在运行一个带有@nrwl/nx 设置和用于单元测试的 Jest 的 Angular 项目。我已将 Jest 配置为为每个应用程序和 lib 生成 lcov 文件,然后由 SonarQube Scanner 拾取以报告测试覆盖率。每个库都是它自己的声纳模块。

最近我将我的 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 现在路径是不同的。

【问题讨论】:

【参考方案1】:

我也遇到了同样的问题!我通过在测试执行后执行一个脚本来解决它,该脚本将通过将相对路径转换为绝对路径(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);
  );
);

【讨论】:

【参考方案2】:

我解决了将“coverageReporters”配置从根文件夹的“jest.config.js”移动到项目文件夹的“jest.config.ts”,并在我设置的lcov配置中:

coverageReporters: ['html', ["lcovonly", "projectRoot": __dirname], 'text-summary'],

将 projectRoot 设置为 __dirname 使“SF”路径再次相对。

【讨论】:

谢谢,你用这个“_dirname”拯救了我的一天 :),我有 2 个具有相同配置的项目,并且 lcov SF 路径是相对的,但有不同的根...【参考方案3】:

我有同样的问题!我解决了这个问题:

coverageReporters: ["json", ["lcov", "projectRoot": "../../"]]

喜欢开玩笑的配置文档 https://jestjs.io/docs/configuration#coveragereporters-arraystring--string-options

添加你需要的所有“../../”。

【讨论】:

以上是关于自 Jest 25 以来,覆盖率报告具有不同的源路径的主要内容,如果未能解决你的问题,请参考以下文章

Jest + Coverage + VueJs 如何覆盖 vue 方法?

Linux Kernel 开发报告 25 周年版

Jest、Typescript、ts-jest:覆盖范围略有不正确

用 Jest 测试 Typescript 接口

多行var声明上的Jest单元测试分支覆盖率

发布管道 Azure Devops 代码覆盖率报告