Как запустить nyc merge из Makefile?

Я унаследовал базу кода 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 есть ошибка; но если я помещу эту команду в командную строку оболочки, в результирующий файл ничего не будет помещено.

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


Вот исходная строка Makefile, которую я заменяю:

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

person JohnK    schedule 30.04.2020    source источник


Ответы (1)


Я написал небольшой скрипт в 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

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

person JohnK    schedule 01.05.2020