首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Sonarqube的覆盖范围与istabuljs/nyc合并

将Sonarqube的覆盖范围与istabuljs/nyc合并
EN

Stack Overflow用户
提问于 2019-06-25 13:38:23
回答 1查看 6.7K关注 0票数 7

我有一个类型记录项目,它通过Jenkins管道并行进行所有功能测试(在构建主容器之后)。在管道的末尾,我们创建代码覆盖检查,然后将结果发送给声呐。

这是我的package.json:

代码语言:javascript
复制
"test": "npm run test:unit && npm run test:component && npm run test:functional",
"test:component": "mocha --reporter mocha-sonarqube-reporter --reporter-options output=tests/coverage/component/test-xcomponent.xml --recursive -r ts-node/register tests/component/*.ts",
"test:functional": "mocha --reporter mocha-sonarqube-reporter --reporter-options output=tests/coverage/functional/test-xfunctional.xml --recursive -r ts-node/register tests/functional/*.ts",
"test:unit": "mocha --reporter mocha-sonarqube-reporter --reporter-options output=tests/coverage/unit/test-xunit.xml --recursive -r ts-node/register tests/unit/*.ts",
"test:unit:nosq": "mocha --recursive -r ts-node/register tests/unit/*.ts",
"lint": "tslint -t verbose --project tsconfig.json -c tslint.json",
"cover": "nyc --report-dir tests/coverage/all npm run test",
"cover:unit": "nyc --report-dir tests/coverage/unit npm run test:unit",
"cover:functional": "nyc --report-dir tests/coverage/functional -x 'app/repositories' -x 'app/entities' -x 'app/utils' --no-clean npm run test:functional"

我的声纳项目。属性如下:

代码语言:javascript
复制
sonar.exclusions=**/node_modules/**,**/*.spec.ts,app/entities/**,dependency-check-report/*,tests/coverage/**/*
sonar.tests=tests
sonar.test.inclusions=tests/**/*
sonar.ts.tslintconfigpath=tslint.json
sonar.typescript.lcov.reportPaths=tests/coverage/all/lcov.info

我在这个设置中有两个问题:

  • 我似乎找不到合并不同覆盖文件的方法。我检查了正式的istanbuljs/nyc GitHub,它声明它可以通过nyc merge命令进行组合,但是输出是.json,而sonarqube需要xml。我的代码覆盖率只有一半,因为我只发送一个文件,而不是组合文件。
  • 目前,我在测试/覆盖率/所有文件夹中发现了错误代码,因为它认为从生成的覆盖中丢失的字体正在丢失。我已经将该文件夹排除在sonar-project.properties文件中,我也将其包含在.gitignore中,但是sonarqube仍然将其报告为代码小。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-25 18:11:27

SonarQube不需要XML文件来覆盖JavaScript,它要求报表采用lcov格式。请参阅SonarQube的文档:JavaScript覆盖范围结果导入

为了生成这个lcov报告,您可以执行以下操作:

  1. 将所有JSON覆盖率数据(浏览器/线束将__coverage__全局写入的内容)放在一个目录中,默认为.nyc_output
  2. 运行命令nyc report --reporter=lcov --report-dir=.nyc_coverage
  3. 这告诉nyc,您希望使用--report-dir指定的目录中的所有文件(本例中为.nyc_coverage)生成报表,并且希望报表采用--reporter指定的格式(本例中为lcov)。
  4. nyc将创建一个文件夹(默认情况下为.nyc_output),并在那里写入lcov文件。

如果你愿意,你也可以增加额外的记者为理智。我通常添加--reporter=text,以便它也能打印出覆盖范围。

因此,您的最终命令可能是:

代码语言:javascript
复制
nyc report \
  --reporter=lcov \
  --reporter=text \
  --report-dir=.nyc_coverage

=是可选的,命令参数可以放在子命令之前,所以您还可以运行您注意到的命令:

代码语言:javascript
复制
nyc --reporter lcov --reporter text --report-dir .nyc_coverage report

此外,通过在命令行上指定报表,告诉SonarQube报表在哪里:

代码语言:javascript
复制
sonar-scanner \
  -Dsonar.projectKey=whatever \
  -Dsonar.javascript.lcov.reportPaths=coverage/lcov.info

也可以在项目设置中设置它:

代码语言:javascript
复制
Project -> Administration -> JavaScript -> Tests and Coverage -> LCOV Files
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56755397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档