NYC (Стамбул) исключить тестовый код из отчетов покрытия - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь добавить генерацию отчета о покрытии в проект библиотеки машинописи.

В макет входят следующие каталоги:

project
├─ src
│  ├─ lib      ## project code (typescript), *.tsx
│  ├─ test     ## test specs (typescript), *.spec.tsx
│  └─ @types   ## types I made for a few dependencies that didn't have them
└─ build
   ├─ lib      ## compiled project code (ES5 + type info, with inline sourcemaps), *.js and *.d.ts
   └─ test     ## compiled test specs (ES5 + type info, with inline sourcemaps), *.spec.js and *.spec.d.ts

У меня есть тестовый скрипт в package.json, который, кажется, работает правильно:

    "test": "mocha --reporter mocha-multi --reporter-options mocha-multi=mocha-multi.json --recursive build/test/**/*.spec.js",

(генерирует 1413 строк вывода; в настоящее время все тесты проходят)

Я пытаюсь понять, как запустить nyc, чтобы

  1. Все тесты в test выполняются
  2. Нет файлов в test включены в отчет покрытия
  3. Все файлы кодов в lib включены в отчет о покрытии
  4. Нет информационных файлов типа в lib включены в отчет о покрытии

Мне кажется, я правильно понял # 1 с этой командой:

npx nyc mocha --cache --reporter nyan build/test

который имеет этот вывод:

 872 _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_,------,
 0   _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_|   /\_/\
 0   _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-^|__( ^ .^)
     _-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-  ""  ""

  872 passing (20s)

---------------------|----------|----------|----------|----------|-------------------|
File                 |  % Stmts | % Branch |  % Funcs |  % Lines | Uncovered Line #s |
---------------------|----------|----------|----------|----------|-------------------|
All files            |    88.97 |    91.49 |    84.09 |    89.11 |                   |
 lib                 |    88.51 |    91.49 |    83.33 |    88.62 |                   |
  Awaitable.tsx      |    88.51 |    91.49 |    83.33 |    88.62 |... 79,405,419,420 |
 test                |      100 |      100 |      100 |      100 |                   |
  Abortable.spec.tsx |      100 |      100 |      100 |      100 |                   |
  Awaitable.spec.tsx |      100 |      100 |      100 |      100 |                   |
---------------------|----------|----------|----------|----------|-------------------|

(но более красочно; я использую --reporter nyan, потому что я бы не хотел повторять 1413 строк вывода из тестового сценария)

Этот результат не соответствует целям 2 и 3; этот вопрос о цели 2:

Как сказать nyc исключить test из отчета о покрытии?

(Меня также беспокоит, что отчет неверен - нет тестов, охватывающих другие тесты, - но это не тот вопрос, о котором идет речь.)

Я пытался добавить в команду множество включений и исключений, ни одно из которых не повлияло на вывод:

  • -x build / test
  • -x '** / *. Spec.js'
  • -x '** / *. Spec.tsx'
  • -x 'build / test / **'
  • -х тест
  • -x 'build / test / ** / *. Spec.js'
  • -x 'build / test / ** / *. Spec.tsx'
  • -x 'test / **'
  • -x 'test / ** / *. Spec.js'
  • -x 'test / ** / *. Spec.tsx'
  • -n lib
  • -n build / lib
  • -n src / lib
  • -x build / lib
  • -x lib
  • -x src / lib
  • -X тест
  • -X build / test
  • -X src / test

(Как вы можете видеть, я не уверен, что для них используется basedir; я не ожидал увидеть имена исходных файлов в отчете, но nyc явно что-то делает с обоими из src и build, но не отображается в отчете.)

Я попытался включить параметры после прочтения этого ответа , и это не помогло. После добавления исключений для lib и отсутствия эффекта создается впечатление, что параметр exclude просто не работает. Я не буду переключаться на ES6, как предложено в этом ответе , пока никто, с кем я работаю, не поддерживает IE.

1 Ответ

0 голосов
/ 11 января 2019

Смотря на это снова после достижения 100% тестового покрытия и желая, чтобы nyc check-coverage --branches 100 --functions 100 --lines 100 --statements 100 прошел, я нашел этот ответ :

Правильно, после некоторых копаний мне удалось заставить это работать. Я добавил

"nyc": {
  "include": "app", - only looks in the app folder
  "exclude": "**/*.spec.js" 
}

на мой package.json.

Что привело меня к этому рабочему решению в моем:

"nyc": {
  "include": [ "build/lib/**/*.js" ],
  "exclude": [ "build/test/**/*.spec.js", "build/testlib/**/*.js" ]
}

(Между ними я добавил пути src/testlib и build/testlib, содержащие помощники, используемые только в тестах, которые нельзя запускать как тесты и которые следует исключить из отчетов о покрытии тестов.)

...