Как запустить ny c merge из Makefile? - PullRequest
0 голосов
/ 30 апреля 2020

Я унаследовал кодовую базу JS с модульными тестами Jasmine. Среда тестирования использует karma и instanbul-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-final.json, но ни одна из этих попыток не привела к объединению это в файл результатов coverage-final.json.

С # 1 я уверен, что на самом деле он объединяет только один набор результатов в файл результатов. С # 2 возникает ошибка; но если я добавлю эту команду в CLI оболочки, в файл результатов ничего не добавится.

С # 3, по крайней мере, ошибки нет, но объединен только один из файлов покрытия.


Вот оригинальная строка Makefile, которую я заменяю:

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

1 Ответ

0 голосов
/ 01 мая 2020

Я написал небольшой скрипт в Makefile, чтобы скопировать файлы coverage-final.json из дочерних каталогов каталога coverage в сам каталог coverage, а затем объединить их в файл coverage-final.json в главном JS directory.

@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

Новые имена файлов отдельных файлов покрытия берутся из имен каталогов, из которых они поступают.

...