我使用mocha获取单元测试结果,使用istanbul获取代码覆盖率。我正在使用grunt来运行这些任务。它工作正常。我也使用grunt-sonar-runner
插件在声纳中导入这些结果。目前已导入代码覆盖率,但单元测试结果不是这种情况。在构建期间,声纳报告了我:
20:40:19.410 WARN - Test result will not be saved for test class "Account Controllers User Controller forgot password", because SonarQube associated resource has not been found using file name: "Account Controllers User Controller forgot password.js"
20:40:19.411 WARN - Test result will not be saved for test class "Account Controllers User Controller login", because SonarQube associated resource has not been found using file name: "Account Controllers User Controller login.js"
20:40:19.413 WARN - Test result will not be saved for test class "Account Controllers User Controller logout", because SonarQube associated resource has not been found using file name: "Account Controllers User Controller logout.js"
因此,声纳不保存单位测试结果。我试着改变2.2中的javascript插件版本,或升级5.1.1中的声纳系统,但问题是一样的。我还尝试重命名所有describe
函数以形成文件夹之间.
文件的正确路径(例如:test.unit.controllers.filename.
我意识到它只适用于一个测试。如果你有超过1次测试,它将无法正常工作。
配置:
*声纳(4.5.2)
* javascript插件(2.7)
npm modules:
* mocha-sonar-reporter(^ 0.1.3)
*摩卡:(^ 2.1.0)
* grunt-mocha-test(^ 0.12.7)
答案 0 :(得分:3)
我实际上使用istanbul获得代码覆盖率,并使用mocha获得单元测试结果。的确,摩卡(xunit记者)失败了。仅当您在文件夹和文件名之间使用.
正确设置了一个测试和类名时,它才有效。
以下是mocha和grunt的解决方案,请完全遵循以下步骤并尊重文件和文件夹的命名:
1.使用npm模块:sonar-mocha-reporter
2.在package.json中添加以下行:
"config": {
"mocha-sonar-reporter": {
"classname": "Test",
"testdir": "test",
"outputfile": "report/TEST-results.xml"
}
}
3。定义npm test cmd(我定义了一个用grunt mocha-test
插件运行测试的grunt任务):
"scripts": {
"test": "grunt runTests"
}
4。定义grunt任务:
module.exports = function(grunt) {
grunt.config.set('mochaTest', {
test: {
options: {
timeout: 6000,
reporter: 'mocha-sonar-reporter',
quiet: false,
clearRequireCache: true
},
src: ['test/**/*.js']
}
});
grunt.loadNpmTasks('grunt-mocha-test');
};
5。使用grunt sonar-runner
插件配置您的报告,如果不是这样,则添加这些行(选项对象):
dynamicAnalysis: 'reuseReports',
tests: 'test',
javascript: {
jstestdriver: {
reportsPath: 'report'
},
lcov: {
reportPath: 'report/lcov.info'
}
},
npm test
命令运行测试。使用grunt
或gulp
,它将无效。配置:
*声纳(4.5.2)
* javascript插件(2.7)
npm modules:
* mocha-sonar-reporter(^ 0.1.3)
*摩卡:(^ 2.1.0)
* grunt-mocha-test(^ 0.12.7)
有助于我解决此问题的有用文档:sonarqube javascript plugin docs
答案 1 :(得分:1)
在节点应用程序中,我解决了这个问题,执行以下步骤:
首先:在 package.json 文件中,我包含了这一行:
"scripts": {
...,
...,
"test": "nyc --reporter=lcov --reporter=text-lcov mocha test/*/*.js"
},
第二步:安装 nyc
npm install nyc --save-dev
最后:运行声纳扫描仪
我在这个案例的回购中创建了一个例子:
https://github.com/macielbombonato/docker-sonar/blob/master/tools/scripts/scanner-npm.sh
我希望这可以提供帮助。
答案 2 :(得分:1)
我使用 Bamboo for CI + SonarQube,所以这个答案(针对 NodeJS)结合了两者,在 Bamboo 中获得测试报告的可见性,在 SonarQube 中获得测试执行的可见性和代码覆盖的可见性:
yarn add -D mocha-bamboo-reporter mocha-multi-reporters mocha-sonarqube-reporter
sonar-project.properties
:
# this is for code coverage
sonar.javascript.lcov.reportPaths=coverage/lcov.info
# this is for test reports
sonar.testExecutionReportPaths=coverage/test_results.xml
package.json
: "testWithCoverage": "nyc -r lcov -e .ts -x \"*.test.ts\" mocha --reporter mocha-multi-reporters --reporter-options configFile=mocha-multi-config.json -r ts-node/register test/**/*.spec.ts && nyc report",
mocha-multi-config.json
:{
"reporterEnabled": "mocha-bamboo-reporter, mocha-sonarqube-reporter",
"mochaSonarqubeReporterReporterOptions": {
"output": "coverage/test_results.xml"
},
"mochaBambooReporterReporterOptions": {
"output": "coverage/mocha.json"
}
}