1

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

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

#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其中,但这些尝试都没有成功地将其合并到结果文件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
4

1 回答 1

0

我在 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

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

于 2020-05-01T15:47:22.153 回答