标签: istanbul

如何使用 Jest 收集生成的子流程的代码覆盖率?

我正在为 CLI 编写集成测试。所有单元测试都是使用 Jest 编写的,开箱即用,无需任何配置即可生成代码覆盖率,但不幸的是,它不会检测子进程,例如通过 Node 的 spawn 和 fork 命令执行。

我曾尝试按照GitHub 问题上的评论中的建议将纽约引入其中,但它对我不起作用。

我尝试过各种配置(基于上述最初的建议以及这些问题的想法:12),但是我要么根本没有覆盖统计数据,要么只覆盖我的单元测试,而不是生成子的集成测试流程。

my 的相关部分package.json配置了 nyc 和 Jest:

"scripts": {
  "test": "cross-env NODE_ENV=test nyc --clean jest --coverage",
},
"jest": {
  "verbose": true,
  "testURL": "http://localhost/",
  "globalSetup": "./jest.setup.js",
  "transform": {
    "^.+\\.js$": "babel-jest"
  },
  "collectCoverage": false
},
"nyc": {
  "include": [
    "packages/*/src/**/*.js"
  ],
  "reporter": [
    "html"
  ]
},
Run Code Online (Sandbox Code Playgroud)

我用来execa运行子进程并执行以下操作:

await execa("nyc --reporter none node", args);
Run Code Online (Sandbox Code Playgroud)

node.js istanbul jestjs nyc

6
推荐指数
0
解决办法
980
查看次数

在容器中运行安装测试后,伊斯坦布尔覆盖率未知

我正在尝试为在 docker 容器中运行的单元测试设置覆盖范围。但是,覆盖率报告无法在容器内按预期生成。但是,当命令在容器外部(在 Mac OSX 和 CentOS 上)运行时,它们会成功生成。

我将代码库安装到图像中预先存在的路径。

该图像基于节点:8.11.4
karma v3.1.4
karma-coverage v1.1.2
karma-coverage-istanbul-reporter v2.0.4
karma-webpack v4.0.0-rc.5
istanbul-instrumenter-loader v.3.0.1 。

尝试梳理问题:

  • __dirname在 karma.conf.js 中将basePath 设置为
  • path.join使用 karma.conf.js 和 webpack 使用的入口点规范所有路径。
  • 验证源是否已捆绑。
  • 在 Mac OSX 和 CentOS 上的容器外部运行(报告成功)
  • 将仪器的 debug 设置为 true(无错误)
  • 从容器内部重新安装已安装的node_modules
  • 使用coverageistanbul-coverage记者。
  • 关闭 Chrome 沙盒 v72.0.3626.81 (headless)
  • 在本地和詹金斯运行(结果相同)
  • 删除-u $(id -u):$(id -g)并没有什么区别

您想看到什么代码?

docker run --privileged \
-u $(id -u):$(id -g) \
--mount type=bind,source=$(pwd),dst=/home/node/test/ \
-it $DOCKER_IMAGE \
/bin/bash -c …
Run Code Online (Sandbox Code Playgroud)

ubuntu node.js karma-runner docker istanbul

6
推荐指数
1
解决办法
1980
查看次数

有没有办法显示遗漏的覆盖范围在业力覆盖范围内

我有一个 Angular 应用程序,我正在尝试进行测试,但是找到需要覆盖的地方是一场噩梦。

输出显示如下:

=============================== Coverage summary ===============================      
Statements   : 91.67% ( 22/24 )
Branches     : 75% ( 3/4 )
Functions    : 75% ( 3/4 )
Lines        : 90.48% ( 19/21 )
================================================================================ 
Run Code Online (Sandbox Code Playgroud)

有没有办法查看这些语句、分支、函数和行没有被覆盖的地方?

例如一些输出说

Statements:
1. file: some/file/name.js line:03
2. file: some/file/name.js line:06
Run Code Online (Sandbox Code Playgroud)

那可能吗?

谢谢

istanbul karma-jasmine karma-coverage angular

6
推荐指数
1
解决办法
1906
查看次数

通过 Postman 或 Karate 执行 HTTP 端点时如何使用 Istanbul 收集代码覆盖率

我有一个 JS 项目,它提供了一组利用 Express 和典型的 Express/路由器模式的端点。

const express = require('express');
const router = new express.Router();

router.post('/', async (req, res, next) => { });
router.get('/:abc', async (req, res, next) => { });

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

npm start我可以成功启动用于调用的服务器node ./src/index.js并使端点可用https://localhost:8080

我还可以利用 Postman 等工具或 Karate 等自动化工具成功测试这些端点。

我遇到的问题是,当通过http://localhost:8080行使产品源 JS 时,我似乎无法使用 Istanbul 收集代码覆盖率。

我已经尝试npm start过其次是nyc --all src/**/*.js gradlew test. 后者是测试端点的自动化。这导致 0% 的覆盖率,我假设这是由于没有使用 npm start 运行 nyc 造成的。

接下来我尝试nyc --all src/**/*.js npm start并注意到一些覆盖范围,但这只是启动 Express 服务器的覆盖范围。

接下来,我尝试了 …

code-coverage node.js express istanbul karate

6
推荐指数
1
解决办法
2856
查看次数

“伊斯坦布尔忽略下一个”命令似乎被忽略

我正在尝试使用 Jest 来测试我的代码。它工作得很好,直到我尝试从测试中排除类方法。

\n

querySelector() 调用是我想跳过此方法进行测试的原因(除非我在浏览器中运行脚本,否则“文档”显然为空)

\n

我尝试了这个解决方案,这似乎是最受建议的解决方案:

\n
  /* istanbul ignore next */\n  appendNewInputFields() {\n\n    const howMany = Number(document.querySelector('#items-to-add').value);\n    \n    [...Array(howMany)].forEach( i => {\n      const newInputField = this.createNewItemInputField();\n      this.inputItemsContainerNode.append(newInputField);\n    });\n  }\n
Run Code Online (Sandbox Code Playgroud)\n

但测试一直失败,并且这条线/* istanbul ignore next */ 似乎被忽略了。

\n

我还尝试将注释放在函数签名及其主体之间(正如此处建议的那样),但没有运气:

\n
 FAIL  js/DOMManager.test.js\n  \xe2\x97\x8f Test suite failed to run\n\n    TypeError: Cannot read property 'value' of null\n\n      135 |   appendNewInputFields() /* istanbul ignore next */ {\n      136 |\n    > 137 |     const howMany = Number(document.querySelector('#items-to-add').value);\n          |                            ^\n      138 | …
Run Code Online (Sandbox Code Playgroud)

javascript node.js istanbul jestjs

6
推荐指数
1
解决办法
2万
查看次数

在 Cucumber js 中获取覆盖率统计数据的最佳方法是什么?

我正在使用Gherkin语法的行为驱动开发 (BDD) 方法设计我的测试,并使用Cucumber JS运行我的测试。

我正在使用Cucumber Studio共享报告并与我的业务利益相关者和管理层保持同步。

最近,我需要获取该项目的测试覆盖率报告,并进行了一些研究,但无法决定使用哪个库来获取覆盖率报告以及如何获取。

到目前为止,我已经找到了JSCoverCucumber ReportsIstanbul来获取测试覆盖率报告,但我不确定如何准确使用它们,以及哪种最适合我的情况与 Cucumber JS 一起使用。

javascript jscoverage istanbul test-coverage cucumberjs

6
推荐指数
1
解决办法
3240
查看次数

Karma - 伊斯坦布尔 - 代码覆盖率报告路径

karma用作茉莉花测试运行器,instanbul作为代码覆盖工具.一切都很完美,但有一个问题 - 有什么方法可以改变创建报告的路径吗?

即我得到的Chrome /coverage/Chrome%2035.0.1916%20(Windows%207)/index.html; 我会更开心/coverage/Chrome/index.html

任何建议非常感谢.

code-coverage node.js karma-runner istanbul karma-jasmine

5
推荐指数
1
解决办法
1802
查看次数

使用Istanbul和Mocha来覆盖ES6代码

我有用ES6编写的Node代码,我通过发布测试mocha --harmony.测试很好 - 一切正常.

现在我想添加coverage和istanbul,但是我遇到了第一个箭头函数的错误:

No coverage information was collected, exit without writing coverage information
c:\Users\Guy\Code\alpha-dev\tests\helpers.js:12
    setTimeout(() => {
                ^
SyntaxError: Unexpected token )
    at exports.runInThisContext (vm.js:73:16)
    at Module._compile (module.js:443:25)
    at Module._extensions..js (module.js:478:10)
    at Object.Module._extensions..js (c:\Users\Guy\Code\alpha-dev\node_modules\istanbul\lib\hook.js:101:13)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
Run Code Online (Sandbox Code Playgroud)

这是我试过的:

  1. 安装伊斯坦布尔和谐(来自git://github.com/gotwarlost/istanbul.git#harmony)作为我的开发依赖.
  2. 运行以下命令: "./node_modules/.bin/istanbul" cover "./node_modules/mocha/bin/_mocha" -- --harmony tests -R spec
  3. 伊斯坦布尔和_mocha旗帜的组合

我如何运行istanbul来涵盖使用ES6功能编写的测试?我错过了什么?

code-coverage mocha.js node.js ecmascript-6 istanbul

5
推荐指数
1
解决办法
4166
查看次数

"ng test"不能同时进行覆盖率报告和TeamCity报告

我正在尝试在TeamCity构建服务器上运行Angular CLI项目的单元测试.

如果我使用命令:

ng test --single-run --code-coverage
Run Code Online (Sandbox Code Playgroud)

然后,正如预期的那样,我得到了测试覆盖率报告,但是各个测试结果没有显示在TeamCity中.

如果我打开TeamCity报告:

ng test --single-run --code-coverage --reporters teamcity
Run Code Online (Sandbox Code Playgroud)

然后测试通过并且TeamCity报告完美地工作,但它无声地生成代码覆盖率报告.此行为在我的本地计算机上是可重现的,因此它与构建服务器的配置方式无关.

有这两个选项应该互相排斥的原因吗?

注意 - 这与在TeamCity上为Karma配置代码覆盖率报告不同.如果报告在那里,那么TeamCity会正确显示它,但如果我打开TeamCity报告标志,那么coverage文件夹就不存在了.

附加信息:

  • Angular-CLI版本1.0.0-rc.4(首次使用1.0.0-rc.1发现问题)
  • Karma版本1.4.1
  • 节点版本6.9.4
  • Windows 7企业版

业力配置:

// Karma configuration file, see link for more information
// https://karma-runner.github.io/0.13/config/configuration-file.html

module.exports = function (config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine', '@angular/cli'],
    plugins: [
      require('karma-jasmine'),
      require('karma-chrome-launcher'),
      require('karma-jasmine-html-reporter'),
      require('karma-coverage-istanbul-reporter'),
      require('@angular/cli/plugins/karma'),
      require('karma-teamcity-reporter')
    ],
    client:{
      clearContext: false // leave Jasmine Spec Runner output visible in browser
    },
    files: [
      { pattern: './src/test.ts', watched: false …
Run Code Online (Sandbox Code Playgroud)

teamcity istanbul karma-jasmine karma-coverage angular-cli

5
推荐指数
1
解决办法
2474
查看次数

SonarQube和Lcov报告无法解析文件路径

我们正在尝试为我们的角度应用程序制作SonarQube代码覆盖率报告.我们使用Karma生成代码覆盖率报告并将其导入SonarQube分析器.

SonarQube已经为我们的项目提供了C#覆盖,现在我们也希望添加JavaScript代码覆盖.

Teamcity调用,Karma和它创建代码覆盖并将lcov文件和报告文件放入src\Planning.Spa\Coverage\report文件夹.

LCOV文件

TN:
SF:E:/a03/work/bb52cb33e083fc9/src/Planning.Spa/Offer/app/app.component.js
FN:5,(anonymous_1)
FN:6,AppComponent
FN:8,(anonymous_3)
FN:9,(anonymous_4)
Run Code Online (Sandbox Code Playgroud)

Teamcity具有以下MSBuild参数,用于生成C#代码覆盖率和JavaScript覆盖率.

SonarQube MSBuild配置

$sonar=%system.MSBUILD_SONARQUBE_RUNNER%\MSBuild.SonarQube.Runner.exe 
begin /k:"com.test:Test" /n:"MyProject" /v:"%build.number%" 
/d:sonar.cs.dotcover.reportsPaths="$coverageReport" 
/d:sonar.cs.nunit.reportsPaths="$testResults" 
/d:sonar.javascript.lcov.reportPaths="coverage\report\lcov.info"
Run Code Online (Sandbox Code Playgroud)

在运行SonarQube分析时,我们收到以下错误

[14:35:56][Step 13/13] 14:35:56.243 WARN: Could not resolve 114 file paths in
 [E:\a03\work\bb52cb33e083fc9\src\Planning.Spa\coverage\report\lcov.info], 
first unresolved path: E:/a03/work/bb52cb33e083fc9/src/Planning.Spa/Offer/app/app.component.js
Run Code Online (Sandbox Code Playgroud)

我们没有找到使用MSBuild runner运行C#和JavaScript的任何示例.也找不到任何与此相关的答案Could not resolve file paths

我们正努力让它在过去两周内发挥作用,但却找不到任何有用的示例或答案.类似的问题在这里这里都没有答案

更新声纳分析更多信息

[14:35:43][Step 13/13] 14:35:43.751 INFO: Base dir: E:\a03\work\bb52cb33e083fc9\src\Planning.Spa
[14:35:43][Step 13/13] 14:35:43.751 INFO: Working dir: E:\a03\work\bb52cb33e083fc9\.sonarqube\out\.sonar\com.Planning_com.Planning_6CC487F0-8283-4351-9B65-F1698B1B804E
[14:35:43][Step 13/13] 14:35:43.755 INFO: Source paths: Offer/App/app.component.js, Offer/App/app.component.js.map, Offer/App/Common/order-by.pipe.js
[14:35:43][Step 13/13] 14:35:43.755 …
Run Code Online (Sandbox Code Playgroud)

javascript istanbul sonarqube karma-coverage sonarjs

5
推荐指数
1
解决办法
2989
查看次数