导入mocha单元测试导致sonarqube

时间:2015-07-11 17:19:35

标签: javascript gruntjs sonarqube mocha

我使用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)

3 个答案:

答案 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'
       }
   },
  1. 使用npm test命令运行测试。使用gruntgulp,它将无效。
  2. 配置:
    *声纳(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"
  }
}