合并来自 Cypress 和 Karma 的代码覆盖率报告 JSON 文件不会产生正确的结果

问题描述 投票:0回答:1

我有一个 Angular 项目,我想使用内置的单元测试工具(karma)和 cypress 来测试它。我的任务是合并两者的代码覆盖率报告

我已成功创建覆盖配置。输出已成功与

nyc merge
合并:但是,数字不相加。

来自

package.json
的相关版本:

    "@angular/core": "^16.0.3",
    "cypress": "^12.13.0",
    "istanbul-lib-coverage": "^3.2.0",
    "@cypress/code-coverage": "^3.11.0",
    "@cypress/webpack-preprocessor": "^5.17.1",
    "@istanbuljs/nyc-config-typescript": "^1.0.2",
    "@jsdevtools/coverage-istanbul-loader": "^3.0.5",
    "karma": "^6.4.2",
    "karma-coverage": "^2.2.0",
    "nyc": "^15.1.0",

以下是 coverage-final.json

Karma
覆盖率报告结果中的文件示例:

...
".../frontend/src/main/resources/ngapp/src/app/common/app-components/language-selector/language-selector.component.ts": {"path":".../frontend/src/main/resources/ngapp/src/app/common/app-components/language-selector/language-selector.component.ts","statementMap":{"0":{"start":{"line":16,"column":11},"end":{"line":16,"column":38}},"1":{"start":{"line":17,"column":12},"end":{"line":17,"column":40}},"2":{"start":{"line":18,"column":21},"end":{"line":18,"column":45}},"3":{"start":{"line":19,"column":12},"end":{"line":19,"column":38}},"4":{"start":{"line":23,"column":4},"end":{"line":23,"column":56}},"5":{"start":{"line":27,"column":4},"end":{"line":27,"column":30}},"6":{"start":{"line":28,"column":4},"end":{"line":28,"column":35}},"7":{"start":{"line":29,"column":4},"end":{"line":29,"column":62}},"8":{"start":{"line":33,"column":4},"end":{"line":33,"column":39}},"9":{"start":{"line":37,"column":4},"end":{"line":37,"column":30}},"10":{"start":{"line":38,"column":4},"end":{"line":38,"column":31}},"11":{"start":{"line":11,"column":13},"end":{"line":40,"column":null}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":null}},"loc":{"start":{"line":19,"column":38},"end":{"line":20,"column":6}}},"1":{"name":"(anonymous_1)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":10}},"loc":{"start":{"line":22,"column":10},"end":{"line":24,"column":3}}},"2":{"name":"(anonymous_2)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":16}},"loc":{"start":{"line":26,"column":22},"end":{"line":30,"column":3}}},"3":{"name":"(anonymous_3)","decl":{"start":{"line":32,"column":2},"end":{"line":32,"column":9}},"loc":{"start":{"line":32,"column":13},"end":{"line":34,"column":3}}},"4":{"name":"(anonymous_4)","decl":{"start":{"line":36,"column":2},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":18},"end":{"line":39,"column":3}}}},"branchMap":{},"s":{"0":11,"1":11,"2":11,"3":11,"4":7,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":1},"f":{"0":11,"1":7,"2":0,"3":0,"4":0},"b":{}}
...
Karma 运行的

lcov 报告

coverage-final.jsonCypress

覆盖结果中的相同文件:

... ".../frontend/src/main/resources/ngapp/src/app/common/app-components/language-selector/language-selector.component.ts": {"path":".../frontend/src/main/resources/ngapp/src/app/common/app-components/language-selector/language-selector.component.ts","statementMap":{"0":{"start":{"line":11,"column":38},"end":{"line":11,"column":null}},"1":{"start":{"line":19,"column":38},"end":{"line":19,"column":null}},"2":{"start":{"line":16,"column":11},"end":{"line":16,"column":38}},"3":{"start":{"line":17,"column":12},"end":{"line":17,"column":40}},"4":{"start":{"line":18,"column":21},"end":{"line":18,"column":45}},"5":{"start":{"line":19,"column":12},"end":{"line":19,"column":38}},"6":{"start":{"line":23,"column":4},"end":{"line":23,"column":null}},"7":{"start":{"line":27,"column":4},"end":{"line":27,"column":null}},"8":{"start":{"line":28,"column":4},"end":{"line":28,"column":null}},"9":{"start":{"line":29,"column":4},"end":{"line":29,"column":null}},"10":{"start":{"line":33,"column":4},"end":{"line":33,"column":null}},"11":{"start":{"line":37,"column":4},"end":{"line":37,"column":null}},"12":{"start":{"line":38,"column":4},"end":{"line":38,"column":null}},"13":{"start":{"line":11,"column":13},"end":{"line":11,"column":null}}},"fnMap":{"0":{"name":"(anonymous_1)","decl":{"start":{"line":11,"column":38},"end":{"line":11,"column":null}},"loc":{"start":{"line":11,"column":38},"end":{"line":11,"column":null}}},"1":{"name":"(anonymous_2)","decl":{"start":{"line":15,"column":2},"end":{"line":15,"column":null}},"loc":{"start":{"line":19,"column":38},"end":{"line":20,"column":null}}},"2":{"name":"(anonymous_3)","decl":{"start":{"line":22,"column":2},"end":{"line":22,"column":10}},"loc":{"start":{"line":22,"column":10},"end":{"line":24,"column":null}}},"3":{"name":"(anonymous_4)","decl":{"start":{"line":26,"column":2},"end":{"line":26,"column":16}},"loc":{"start":{"line":26,"column":22},"end":{"line":30,"column":null}}},"4":{"name":"(anonymous_5)","decl":{"start":{"line":32,"column":2},"end":{"line":32,"column":9}},"loc":{"start":{"line":32,"column":13},"end":{"line":34,"column":null}}},"5":{"name":"(anonymous_6)","decl":{"start":{"line":36,"column":2},"end":{"line":36,"column":18}},"loc":{"start":{"line":36,"column":18},"end":{"line":39,"column":null}}}},"branchMap":{"0":{"loc":{"start":{"line":11,"column":13},"end":{"line":11,"column":38}},"type":"binary-expr","locations":[{"start":{"line":11,"column":13},"end":{"line":11,"column":38}},{"start":{"line":11,"column":13},"end":{"line":11,"column":38}}]}},"s":{"0":30,"1":190,"2":38,"3":38,"4":38,"5":38,"6":38,"7":0,"8":0,"9":0,"10":9992,"11":0,"12":0,"13":98},"f":{"0":30,"1":38,"2":38,"3":0,"4":9992,"5":0},"b":{"0":[38,38]}} ...
Cypress 运行的 

lcov-report

将两者与

nyc merge 合并

后,我得到这个结果 `:

".../frontend/src/main/resources/ngapp/src/app/common/app-components/language-selector/language-selector.component.ts": { "path": ".../frontend/src/main/resources/ngapp/src/app/common/app-components/language-selector/language-selector.component.ts", "statementMap": { "0": { "start": { "line": 11, "column": 38 }, "end": { "line": 11, "column": null } }, "1": { "start": { "line": 19, "column": 38 }, "end": { "line": 19, "column": null } }, "2": { "start": { "line": 16, "column": 11 }, "end": { "line": 16, "column": 38 } }, "3": { "start": { "line": 17, "column": 12 }, "end": { "line": 17, "column": 40 } }, "4": { "start": { "line": 18, "column": 21 }, "end": { "line": 18, "column": 45 } }, "5": { "start": { "line": 19, "column": 12 }, "end": { "line": 19, "column": 38 } }, "6": { "start": { "line": 23, "column": 4 }, "end": { "line": 23, "column": null } }, "7": { "start": { "line": 27, "column": 4 }, "end": { "line": 27, "column": null } }, "8": { "start": { "line": 28, "column": 4 }, "end": { "line": 28, "column": null } }, "9": { "start": { "line": 29, "column": 4 }, "end": { "line": 29, "column": null } }, "10": { "start": { "line": 33, "column": 4 }, "end": { "line": 33, "column": null } }, "11": { "start": { "line": 37, "column": 4 }, "end": { "line": 37, "column": null } }, "12": { "start": { "line": 38, "column": 4 }, "end": { "line": 38, "column": null } }, "13": { "start": { "line": 11, "column": 13 }, "end": { "line": 11, "column": null } } }, "fnMap": { "0": { "name": "(anonymous_1)", "decl": { "start": { "line": 11, "column": 38 }, "end": { "line": 11, "column": null } }, "loc": { "start": { "line": 11, "column": 38 }, "end": { "line": 11, "column": null } } }, "1": { "name": "(anonymous_2)", "decl": { "start": { "line": 15, "column": 2 }, "end": { "line": 15, "column": null } }, "loc": { "start": { "line": 19, "column": 38 }, "end": { "line": 20, "column": null } } }, "2": { "name": "(anonymous_3)", "decl": { "start": { "line": 22, "column": 2 }, "end": { "line": 22, "column": 10 } }, "loc": { "start": { "line": 22, "column": 10 }, "end": { "line": 24, "column": null } } }, "3": { "name": "(anonymous_4)", "decl": { "start": { "line": 26, "column": 2 }, "end": { "line": 26, "column": 16 } }, "loc": { "start": { "line": 26, "column": 22 }, "end": { "line": 30, "column": null } } }, "4": { "name": "(anonymous_5)", "decl": { "start": { "line": 32, "column": 2 }, "end": { "line": 32, "column": 9 } }, "loc": { "start": { "line": 32, "column": 13 }, "end": { "line": 34, "column": null } } }, "5": { "name": "(anonymous_6)", "decl": { "start": { "line": 36, "column": 2 }, "end": { "line": 36, "column": 18 } }, "loc": { "start": { "line": 36, "column": 18 }, "end": { "line": 39, "column": null } } } }, "branchMap": { "0": { "loc": { "start": { "line": 11, "column": 13 }, "end": { "line": 11, "column": 38 } }, "type": "binary-expr", "locations": [ { "start": { "line": 11, "column": 13 }, "end": { "line": 11, "column": 38 } }, { "start": { "line": 11, "column": 13 }, "end": { "line": 11, "column": 38 } } ] } }, "s": { "0": 183, "1": 983, "2": 245, "3": 245, "4": 233, "5": 212, "6": 190, "7": 0, "8": 0, "9": 0, "10": 49960, "11": 3, "12": 0, "13": 490, "14": null, "15": null, "16": null, "17": null, "18": null, "19": null, "20": null, "21": null }, "f": { "0": 183, "1": 211, "2": 190, "3": 0, "4": 49960, "5": 0, "6": null, "7": null, "8": null, "9": null, "10": null }, "b": { "0": [ 190, 190 ] } }
然后运行 

nyc report --reporter=lcov --reporter=text-summary

 结果:

这可能是什么问题?我已经尝试了

https://github.com/istanbuljs/nyc/issues/1302 中的一些建议,但没有一个有效。迁移到早期版本的 Istambul(例如 14.1)会产生乱码数据(它不会解析我的 Typescript 文件)。

angular cypress istanbul nyc
1个回答
0
投票
如果我获取你的 karma 和 cypress 输出,请将它们放入

/cover

 文件夹中的一个干净项目中并运行此语句(注释行是语法)

// nyc merge <input-directory> [output-file] nyc merge cover cover-merged.json
我没有得到与你相同的合并文件。

抽查

    在 karma statementsMap (
  • index:0
    ) 中是第 16 行,它的计数为 
    11
    
    
  • 在 cypress 语句中,地图第 16 行位于
  • index:2
     中并且有计数 
    38
    
    
  • 我的合并输出在
  • index:2
     中也有第 16 行,并且有计数 
    49
    
    
由于您的数字更大,是否有其他一些文件被拖入合并中?

第 16 行计数在 cypress

lcov-report

 中是 
147
 但在 cypress 
coverage-final.json
 中是 
38

我首先会集中精力比较

json

 文件。问题中没有任何其他线索,但请检查 
nyc merge <input-directory> [output-file]
 命令的参数,并查找先前运行的输出文件。

并排 VS 代码

© www.soinside.com 2019 - 2024. All rights reserved.