Как настроить отчет о покрытии стамбула, чтобы исключить определенные источники?

Я разрабатываю стековое приложение nodeJS + angular. Для создания отчетов о покрытии кода для бэкэнда я использую istanbul и mocha. Однако отчеты о покрытии показывают неверные цифры.

Если я запускаю istanbul cover _mocha --print detail /path/to/tests*, я получаю полное покрытие (но только для файла, который требуется по спецификации теста). С другой стороны, если я запускаю istanbul cover _mocha --print detail --include-all-sources /path/to/tests*, istanbul также проверяет тестовое покрытие для кода внешнего интерфейса (angular, который я тестирую с помощью karma / jasmine отдельно).

Как мне запустить istanbul, чтобы он включал только исходные файлы серверной части?


person simonas88    schedule 11.11.2015    source источник


Ответы (3)


Согласно выходным данным справочного покрытия Стамбула

$ ./node_modules/.bin/istanbul help cover

Usage: istanbul cover [<options>] <executable-js-file-or-command> [--<arguments-to-jsfile>]

Options are:

  --config <path-to-config>
          the configuration file to use, defaults to .istanbul.yml

  --root <path>
          the root path to look for files to instrument, defaults to .

  -x <exclude-pattern> [-x <exclude-pattern>]
          one or more glob patterns e.g. "**/vendor/**"

  -i <include-pattern> [-i <include-pattern>]
          one or more glob patterns e.g. "**/*.js"

  --[no-]default-excludes
          apply default excludes [ **/node_modules/**, **/test/**,
          **/tests/** ], defaults to true

  --hook-run-in-context
          hook vm.runInThisContext in addition to require (supports
          RequireJS), defaults to false

  --post-require-hook <file> | <module>
          JS module that exports a function for post-require processing

  --report <format> [--report <format>]
          report format, defaults to lcov (= lcov.info + HTML)

  --dir <report-dir>
          report directory, defaults to ./coverage

  --print <type>
          type of report to print to console, one of summary (default),
          detail, both or none

  --verbose, -v
          verbose mode

  --[no-]preserve-comments
          remove / preserve comments in the output, defaults to false

  --include-all-sources
          instrument all unused sources after running tests, defaults to
          false

  --[no-]include-pid
          include PID in output coverage filename

Вы должны использовать -X, чтобы исключить некоторые файлы из отчетов о покрытии. то есть:

$ ./node_modules/.bin/istanbul cover ./node_modules/mocha/bin/_mocha test -X dist/index.js

Выполнит тест и проигнорирует файл dist / index.js в отчете о покрытии.

person Nicolas Oliver    schedule 09.04.2017

У вас есть код серверной части и код внешнего интерфейса в разных каталогах? Например /test/api и /test/dashboard или что угодно. Если вы храните свой код отдельно, вы можете указать Стамбулу сообщать по каждому из них за один раз следующим образом:

istanbul cover _mocha test/api/**/*.js

Имеет смысл? Это вообще сработало бы для вас?

Дайте мне знать.

person idancali    schedule 13.11.2015
comment
Структура моего проекта больше похожа на ‹code› server / * public / js * (angular) test / mocha / * (backend tests) test / jasmine / * (angular tests) ‹/code› - person simonas88; 17.12.2015

Я также столкнулся с подобной ситуацией и, следовательно, подумал, что стоит поделиться, если это может кому-то помочь, хотя это старый пост. Стамбул принимает текущий каталог (.) в качестве каталога покрытия при выполнении команды. Чтобы включить только конкретный каталог в область покрытия, используйте параметр "--root /dir/". Это создаст отчет о покрытии только для файлов в этом каталоге.

person YuVi    schedule 05.04.2017