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

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

我继承了一个带有 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
istanbul nyc
4个回答
17
投票

在我的 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)。


4
投票

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

的预期行为

0
投票

在我的例子中,我必须通过

--exclude-after-remap=false
从 Typescript 集成测试和单元测试覆盖率 json 文件生成报告:

npx nyc report --reporter html --reporter text -t coverage --report-dir coverage/summary --exclude-after-remap false

0
投票

如何让 nyc report 也检查原始报告数据目录中的代码覆盖率,.nyc_output

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