将 Angular 单元测试报告导入 Sonarqube

Posted

技术标签:

【中文标题】将 Angular 单元测试报告导入 Sonarqube【英文标题】:Import Angular unit test report into Sonarqube 【发布时间】:2018-09-07 09:54:58 【问题描述】:

上下文

在一个使用 karma 和 jasmine 进行单元测试的 Angular5 项目中,我正在使用 karma-sonarqube-unit-reporter 为我的单元测试生成此报告文件。

<testExecutions version="1">
  <file path="src/app/app.component.spec.ts">
    <testCase name="app/app.component.spec.ts should create the app" duration="314"/>
    <testCase name="app/app.component.spec.ts should have as title 'Projet de test Angular5'" duration="104"/>
    <testCase name="src/app/app.component.spec.ts should render title in a h1 tag" duration="114"/>
  </file>
  <file path="src/app/client-add/client-add.component.spec.ts">
    <testCase name="client-add/client-add.component.spec.ts should create" duration="107"/>
  </file>
  <file path="app/client.service.spec">
    <testCase name="app/client.service.spec #getClients should return an Observable&lt;Client[]>" duration="38"/>
  </file>
  <file path="src/app/message.service">
    <testCase name="app/message.service should be created" duration="35"/>
  </file>
</testExecutions>

但是当我将它导入 Sonarqube (v6.7)(通过 Jenkins)时,我得到以下信息

INFO: Sensor Generic Test Executions Report
WARN: Property 'sonar.genericcoverage.unitTestReportPaths' is deprecated. Please use 'sonar.testExecutionReportPaths' instead.
INFO: Parsing C:\Users\adminpp\.jenkins\workspace\ELIS JustElis Beta WEB\reports\ut_report.xml
INFO: Imported test execution data for 0 files
INFO: Test execution data ignored for 4 unknown files, including:
src/app/app.component.spec.ts
src/app/client-add/client-add.component.spec.ts
src/app/client.service.spec
src/app/message.service
INFO: Sensor Generic Test Executions Report (done) | time=110ms

这是我的声纳属性,用于排除和包含源代码和测试代码。

sonar.sourceEncoding=UTF-8
sonar.sources=.
sonar.exclusions=**/node_modules/** 
sonar.test.inclusions = **/*.spec.ts
sonar.import_unkown_files=true
sonar.typescript.lcov.reportPaths=coverage/lcov.info
sonar.testExecutionReportPaths=reports/ut_report.xml

我检查了一下,我的 *.spec.ts 文件在它们应该在的位置。

问题

为什么 Sonarqube 找不到我的文件?

我是否错过了某个属性或重要步骤?

(这个属性sonar.test.inclusions = **/*.spec.ts重要吗?)

【问题讨论】:

你可以尝试添加属性sonar.tests=.(值设置为当前目录) @TiborBlenessy 我添加了这个属性,但我得到了ERROR: Error during SonarQube Scanner execution ERROR: File .angular-cli.json can't be indexed twice. Please check that inclusion/exclusion patterns produce disjoint sets for main and test files 也许是因为我添加了sonar.tests=.sonar.sources=. 这使得声纳索引文件两次(一个用于测试,一个用于源)? @TiborBlenessy 我的错,我删除了这个属性sonar.test.inclusions=**/*.spec.ts,因为我认为它不再需要了,这就是给我一个错误的原因。现在我有了这两个属性,声纳会找到我的文件。你知道这两者是如何相关的,为什么我需要两者? 【参考方案1】:

您可以尝试添加属性 sonar.tests=。 (值设置为当前目录)– Tibor Blenessy

在声纳配置中添加此属性对我有用。

当我设置属性 sonar.tests 但未设置 sonar.test.inclusions 时出现错误,但使用这两个属性时,一切正常。

【讨论】:

以上是关于将 Angular 单元测试报告导入 Sonarqube的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 angular9 和 Jasmine 为所有组件生成 .pdf 格式的单元测试用例代码覆盖率报告

如何在 Angular 单元测试中模拟/监视导入的函数

python_单元测试unittest测试报告HTMLTestRunner

Angular:单元测试路由:预期 '' 是 '/route'

在 Angular 2 中编写最基本的单元测试?

Angular 8 - 加载垫模块的单元测试问题