如何根据 json 结果生成 nyc 报告(没有 .nyc_output)?

How to generate nyc report from json results (no .nyc_output)?

我继承了带有 Jasmine 单元测试的 JS 代码库。测试框架使用 karmainstanbul-combine 来获取代码覆盖率。似乎 istanbul-combine 不适用于当前的节点模块,而且不再维护:推荐的替代品是 nyc。我在 Makefile.

中用 nyc 替换 istanbul-combine 时遇到问题

我成功地将单独的覆盖率结果 (json) 文件合并为一个 coverage-final.json 文件 (),但现在我需要生成摘要报告。

如何从 coverage.json 文件生成摘要报告?

我认为这里的一个问题是我没有包含中间结果的 .nyc_output 目录,因为我没有使用 nyc 来生成覆盖率数据。我所有的覆盖率数据都在 coverage 目录及其子目录中。

我试过指定一个文件名:

npx nyc report --include coverage-final.json

还尝试指定目录:

npx nyc report --include coverage

都不行。

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |       0 |        0 |       0 |       0 |                   
----------|---------|----------|---------|---------|-------------------

CLI 帮助文档说

  --temp-dir, -t          directory to read raw coverage information from

但是当我使用指向 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

在我的 Makefile 中使用这一行有效:

npx nyc report --reporter html --reporter text -t coverage --report-dir coverage/summary

它从 coverage 目录中抓取 JSON 文件,并将它们一起放入 coverage/summary 子目录中的 HTML 报告中。 (不需要我之前 question/answer 中的 nyc merge 命令。)

我不确定为什么 -t 选项以前不起作用。可能是我使用了错误版本的 nyc(15.0.0 而不是 14.1.1,fwiw)。

在尝试多个 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 |
----------|---------|----------|---------|---------|-------------------

但是如果我 运行 在 /usr/share/node/ 下执行相同的命令,我能够获得包含覆盖率数字的正确输出。 不确定这是否是纽约市的一个奇怪的许可问题。如果这是 nyc

的预期行为