我如何从Makefile运行nyc merge?

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

我已经用Jasmine单元测试继承了JS代码库。测试框架使用karmainstanbul-combine来获取代码覆盖率。似乎istanbul-combine不能与当前的节点模块一起使用,并且不再维护:建议的替代值为nyc。我在用istanbul-combine中的nyc替换Makefile时遇到麻烦。

这是我尝试合并数据的尝试(甚至还没有尝试获取报告):

#1

@for dir in $(shell ls -d coverage/*/); do \
    echo "Merging $${dir}"; \
    npx nyc merge $${dir} coverage-final.json; \
done

#2

npx nyc merge coverage coverage-final.json

#3

npx nyc merge --include coverage/*/ coverage-final.json

coverage数据位于coverage/*/coverage-final.json中,但是这些尝试都没有成功将其合并到结果文件coverage-final.json中。

[#1,我很确定它实际上只是将一组结果合并到结果文件中。对于#2,会有一个错误。但是,如果我将该命令放在外壳CLI中,则结果文件中将不放入任何内容。

使用#3,至少没有错误,但是仅合并了一个coverage文件。


这是我要替换的原始Makefile行:

PATH=$(PROJECT_HOME)/bin:$$PATH node_modules/istanbul-combine/cli.js \
    -d coverage/summary -r html \
    coverage/*/coverage-final.json
makefile istanbul nyc
1个回答
0
投票

[我在Makefile中写了一个小脚本,将coverage-final.json文件从coverage目录的子目录复制到coverage目录本身,然后将它们合并到主JS目录中的coverage-final.json文件中。

@cd coverage; \
 for dir in $(dir */coverage-final.json); do \
        fn="$${dir}coverage-final.json"; \
    newName="$${dir::-1}.json"; \
    echo "cp $${fn} $${newName}"; \
    cp $$fn $$newName; \
done;
npx nyc merge coverage coverage-final.json

各个覆盖率文件的新文件名取自它们所来自的目录的名称。

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