我继承了一个带有 Jasmine 单元测试的 JS 代码库。测试框架使用karma和instanbul-combine获取代码覆盖率。它似乎istanbul-combine不适用于当前的节点模块,此外不再维护:推荐的替换是nyc. 我无法代替istanbul-combine与nyc在Makefile。
我成功地将我单独的覆盖结果 (json) 文件合并到一个coverage-final.json文件中(这个 SO 问题),但现在我需要生成摘要报告。
如何从coverage.json文件生成摘要报告?
我认为这里的一个问题是我没有.nyc_output带有中间结果的目录,因为我没有nyc用来生成覆盖数据。我所有的覆盖数据都在一个coverage目录及其子目录中。
我试过指定一个文件名:
npx nyc report --include coverage-final.json
Run Code Online (Sandbox Code Playgroud)
还尝试指定目录:
npx nyc report --include coverage
Run Code Online (Sandbox Code Playgroud)
两者都不起作用。
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 0 | 0 | 0 | 0 |
----------|---------|----------|---------|---------|-------------------
Run Code Online (Sandbox Code Playgroud)
CLI 帮助文档说
--temp-dir, -t directory to read raw coverage information from
Run Code Online (Sandbox Code Playgroud)
但是当我使用那个指向coverage目录(即,npx nyc report -t coverage)时,我得到了同样不令人满意的结果。纽约市显然在接受这些数据的格式方面相当严格。
这是我要替换的原始 Makefile 行:
PATH=$(PROJECT_HOME)/bin:$$PATH node_modules/istanbul-combine/cli.js \
-d coverage/summary -r html \
coverage/*/coverage-final.json
Run Code Online (Sandbox Code Playgroud)
在我的 Makefile 中使用这一行工作:
npx nyc report --reporter html --reporter text -t coverage --report-dir coverage/summary
Run Code Online (Sandbox Code Playgroud)
它从coverage目录中获取 JSON 文件,并将它们一起放入coverage/summary子目录中的 HTML 报告中。(不需要nyc merge我之前的问题/答案中的命令。)
我不确定为什么该-t选项以前不起作用。可能是我使用了错误的版本nyc(15.0.0 而不是 14.1.1,fwiw)。
小智 6
在尝试了多个 nyc 命令从 JSON 生成报告但没有成功后,我发现了 nyc 的一个有趣行为:生成报告时,您必须位于已检测代码的父目录中。例如:如果我检测的代码位于/usr/share/node/**,并且合并coverage.json结果位于/tmp目录中。如果我跑到nyc report --temp-dir=/tmp --reporter=text下面/tmp,我就什么也得不到。
----------|---------|----------|---------|---------|-------------------
File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files | 0 | 0 | 0 | 0 |
----------|---------|----------|---------|---------|-------------------
Run Code Online (Sandbox Code Playgroud)
/usr/share/node但是,如果我在或下运行相同的命令/,我可以获得包含覆盖率数字的正确输出。不确定这在纽约是否是一个奇怪的许可问题。如果这是纽约的预期行为
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |