我继承了一个带有 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
还尝试指定目录:
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 报告中。 (不需要我之前的问题/答案中的 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 的预期行为
在我的例子中,我必须通过
--exclude-after-remap=false
从 Typescript 集成测试和单元测试覆盖率 json 文件生成报告:
npx nyc report --reporter html --reporter text -t coverage --report-dir coverage/summary --exclude-after-remap false
如何让 nyc report 也检查原始报告数据目录中的代码覆盖率,.nyc_output