我的问题是.net网络应用程序有一个带有javascript和JEST单元测试的UI项目的场景。拥有1个sonarQube项目是否正常,可以准确显示.cs和.js文件的代码覆盖率,VStests和Jest Unit测试?
我已经尝试过msbuild跑步者和声纳扫描仪,我只是无法让它在1岁以下工作。
谢谢
根据我的经验,如果将非C#文件包含在项目文件中,分析将会获取非C#文件,如下所示:<Content Include="src\**\*.js" />
对于测试覆盖率,我还没有尝试过,但它应该可以在Begin命令行上定义与JavaScript coverage相关的属性,如下所示:/d:sonar.property.name=value
您可以在一个SonarQube项目中组合javascript和.Net单元测试和覆盖。将显示两者的覆盖范围,但单位测试计数仅来自javascript(仍然不知道如何解决它)
如果您从其他SonarQube属性中删除javascript单元测试xml文件行,您将获得.Net的单元测试计数,而无需任何其他更改。
对于.Net,我们使用opencover来获取.trx文件和coverage xml:
"path/to/OpenCover.Console.exe" -register:user -target:"%MSTestExe%" -targetargs:"/resultsfile:Tests.trx /noisolation /testcontainer:%~dp0Tests\bin\%Configuration%\Tests.dll" -output:"%~dp0results.xml"
对于javascript它是karma(jasmine)与karma-sonarqube-unit-reporter模块获取lcov和xml文件
SonarQube的其他属性准备分析配置步骤(与MSBuild集成):
sonar.cs.opencover.reportsPaths=$(Build.SourcesDirectory)\ProjectName\results.xml
sonar.cs.vstest.reportsPaths=$(Build.SourcesDirectory)\ProjectName\Tests.trx
sonar.genericcoverage.unitTestReportPaths=$(Build.SourcesDirectory)\ProjectName\tests\reports\ut_report.xml
sonar.javascript.lcov.reportPath=$(Build.SourcesDirectory)\ProjectName\tests\reports\coverage\lcov.info