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

PaN*_*175 5 sonarqube jestjs angular nrwl-nx

我正在运行一个带有@nrwl/nx 设置和 Jest 进行单元测试的 Angular 项目。我已将 Jest 配置为为每个应用程序和库生成 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 
Run Code Online (Sandbox Code Playgroud)

我分析了两个版本的 lcov 文件,我注意到生成的路径发生了变化。

Jest 25.1(不起作用)

SF:apps/projectname/src/environments/environment.ts
Run Code Online (Sandbox Code Playgroud)

Jest 24.1(作品)

SF:/mnt/c/Users/Patrick/Projects/projectname/apps/projectname/src/environments/environment.ts
Run Code Online (Sandbox Code Playgroud)

当我手动将其更改为以下内容时,这也有效:

SF:src/environments/environment.ts
Run Code Online (Sandbox Code Playgroud)

但现在我有点卡住了,因为我没有找到一种方法来告诉 Jest 以旧方式生成路径或告诉 Sonar 现在路径是不同的。

小智 9

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

coverageReporters: ['html', ["lcovonly", {"projectRoot": __dirname}], 'text-summary'],
Run Code Online (Sandbox Code Playgroud)

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