Как создать отчет nyc из результатов json (без .nyc_output)?

Я унаследовал базу кода JS с модульными тестами Jasmine. Платформа тестирования использует karma и instanbul-combine для получения покрытия кода. Похоже, что istanbul-combine не работает с существующими модулями узла, и, кроме того, больше не поддерживается: рекомендуемая замена - nyc. У меня возникли проблемы с заменой istanbul-combine на nyc в Makefile.

Мне удалось объединить мои отдельные файлы результатов покрытия (json) в один файл coverage-final.json (это ТАК вопрос), но теперь мне нужно создать сводный отчет.

Как создать сводный отчет из файла coverage.json?

Одна проблема, я думаю, заключается в том, что у меня нет каталога .nyc_output с промежуточными результатами, так как я не использую nyc для создания данных о покрытии. Все мои данные о покрытии находятся в каталоге coverage и его дочерних каталогах.

Я попытался указать имя файла:

npx nyc report --include coverage-final.json

Также попытался указать каталог:

npx nyc report --include coverage

Ни то, ни другое не работает.

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |       0 |        0 |       0 |       0 |                   
----------|---------|----------|---------|---------|-------------------

В справочной документации CLI говорится

  --temp-dir, -t          directory to read raw coverage information from

Но когда я использую эту точку для каталога coverage (а именно, npx nyc report -t coverage), я получаю тот же неудовлетворительный результат. Нью-Йорк, по-видимому, довольно жестко относится к форматам, в которых он будет принимать эти данные.


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

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

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


Ответы (2)


Использование этой строки в моем Makefile сработало:

npx nyc report --reporter html --reporter text -t coverage --report-dir coverage/summary

Он берет файлы JSON из каталога coverage и помещает их в HTML-отчет в подкаталоге coverage/summary. (Команда nyc merge из моего предыдущего вопроса/ответа не понадобилась.)

Я не уверен, почему вариант -t раньше не работал. Возможно, я использовал неправильную версию nyc (15.0.0 вместо 14.1.1, кстати).

person JohnK    schedule 06.05.2020

Попробовав несколько команд nyc для создания отчета из JSON, я обнаружил интересное поведение nyc: Вы должны находиться в родительском каталоге инструментированного кода, когда создаете отчет. Для пример: если код, который я инструментировал, находится в каталоге /usr/share/node/**, а объединенный результат coverage.json находится в каталоге /tmp. Если я запущу nyc report --temp-dir=/tmp --reporter=text под /tmp, я ничего не получу.

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s
----------|---------|----------|---------|---------|-------------------
All files |       0 |        0 |       0 |       0 |
----------|---------|----------|---------|---------|-------------------

Но если я запущу ту же команду под /usr/share/node или /, я смогу получить правильный вывод с номерами покрытия. Не уверен, что это странная проблема с разрешением в Нью-Йорке. Если это ожидаемое поведение Нью-Йорка

person Jason Chenyang Ji    schedule 20.08.2020