我如何 运行 nyc 从 Makefile 合并?

How do I run nyc merge from Makefile?

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

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

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

#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-final.json 中,但 none 次尝试成功将其合并到结果文件中 coverage-final.json

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

对于#3,至少没有错误,但只有一个覆盖文件被合并。


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

PATH=$(PROJECT_HOME)/bin:$$PATH node_modules/istanbul-combine/cli.js \
    -d coverage/summary -r html \
    coverage/*/coverage-final.json

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

@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

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