Покрытие кода для Jest


131

Есть ли способ обеспечить покрытие кода в среде тестирования Javascript Jest, построенной на основе Jasmine?

Внутренняя структура не распечатывает получаемое покрытие кода. Я также пробовал использовать Istanbul , blanket и JSCover , но ни один из них не работает.


Я не очень люблю шутить, но вы видели config.collectCoverage ?
Чиро Коста

Ответы:


124

При использовании Jest 21.2.1 я могу видеть покрытие кода в командной строке и создавать каталог покрытия, переходя --coverageк сценарию Jest. Вот несколько примеров:

Я обычно устанавливаю Jest локально, и в этом случае команда может выглядеть так:

npx jest --coverage

Я предполагаю (хотя и не подтверждал), что это также будет работать, если я установлю Jest глобально:

jest --coverage

Очень редкие документы находятся здесь

Когда я перешел в каталог охвата / lcov-report, я нашел файл index.html, который можно было загрузить в браузер. Он включал информацию, напечатанную в командной строке, а также дополнительную информацию и некоторые графические данные.


7
Никогда не используйте глобальные модули. Чтобы обеспечить согласованность версий и наличие пакета, всегда используйте исполняемый файл в node_modulesvia ./node_modules/.bin/jest --coverage. Пока пакет назван в package.json, вы можете гарантировать выполнение именно той версии шутки, которую ожидаете.
taystack

Как получить шутливое освещение только для измененных файлов?
Shanika Ediriweera

Есть ли простой способ не пройти тесты, если охват ниже определенного предела? Соответствующий SO-вопрос: stackoverflow.com/questions/60512167/…
Стефан


88

ОБНОВЛЕНИЕ: 20.07.2018 - Добавлены ссылки и обновлено название для репортеров.

ОБНОВЛЕНИЕ: 14.08.2017 - Этот ответ полностью устарел. Просто посмотрите документацию Jest. У них есть официальная поддержка и документация о том, как это сделать.

У @hankhsiao есть разветвленное репо, в котором Стамбул работает с Jest. Добавьте это в свои зависимости разработчика

 "devDependencies": {
     "jest-cli": "git://github.com/hankhsiao/jest.git"
 }

Также убедитесь, что покрытие включено в вашей записи jest package.json и вы также можете указать нужные форматы. (HTML - довольно плохая задница).

 "jest": {
     "collectCoverage": true,
     "coverageReporters": ["json", "html"],
 }

См. Документацию Jest для покрытияReporters (по умолчанию ["json", "lcov", "text"])

Или добавьте, --coverageкогда вызываете шутку.


1
Опция extensionFormats была удалена - похоже, что json и html генерируются каждый раз.

1
Я использую опцию --coverage, но ничего другого не происходит.
gbbr 02

3
Он (сейчас) называется, coverageReportersи по умолчанию это ["json", "lcov", "text"]. См. Facebook.github.io/jest/docs/…
Карстен С.

не работает, обнаружен неизвестный параметр «охватФорматы» со значением [«json», «html»].
srghma

40

Январь 2019: версия Jest 23.6

Для тех, кто недавно изучает этот вопрос, особенно при тестировании с использованием npmили yarnнапрямую

В настоящее время вам не нужно изменять параметры конфигурации

Согласно официальному сайту jest , вы можете сделать следующее для создания отчетов о покрытии:

1- Для npm:

Вы должны поставить --перед передачей --coverageаргумента шутки

npm test -- --coverage

если вы попытаетесь вызвать --coverageнапрямую без --него, это не сработает

2- Для пряжи:

Вы можете передать --coverageаргумент шутки напрямую

yarn test --coverage

1
Как получить шутливое освещение только для измененных файлов?
Shanika Ediriweera

Изменилось с каких пор? Вероятно, вы захотите использовать --watchдля этого настройку.
koehn

1
Этот ответ делает множество предположений о состоянии единиц package.json.
airtonix

6

Хорошо, проигнорируйте мой предыдущий ответ, поскольку кто-то сказал мне, что это не решило проблему.

Новый ответ:

1) Проверьте последнюю шутку (v 0.22): https://github.com/facebook/jest

2) Команда facebook помещает Стамбул как часть отчета о покрытии, и вы можете использовать его напрямую.

3) После выполнения jest вы можете получить отчет о покрытии на консоли, а в корневой папке, установленной jest, вы найдете отчет о покрытии в формате json и html.

4) К вашему сведению, если вы устанавливаете из npm, вы можете не получить последнюю версию; поэтому сначала попробуйте github и убедитесь, что покрытие именно то, что вам нужно.


Старый ответ:

У меня такая же проблема. Короткий ответ: Istanbulи JestНЕ работают вместе.

Проверьте следующие страницы для получения более подробной информации:

https://github.com/facebook/jest/issues/101

jest использует contexttify, который запускает сценарии JS в контексте V8 в собственном коде, таким образом обходя все перехватчики istanbul require и vm.runInThisContext. Таким образом, istanbul cover не будет работать, поскольку стандартные подключаемые функции node.js не используются, и файлы предварительной инструментальной обработки тоже не помогут, поскольку каждый тест выполняется в своей собственной песочнице, и нет глобального, в котором можно было бы спрятать объект покрытия.

@Ciro Costa: config.collectCoverageНЕ работает, так как это функция TODO. Пожалуйста, проверьте исходный код.


Вопрос был в том, как получить покрытие кода для Jest. То, что Стамбул и Jest не работают вместе, может быть правдой, но это не отвечает на вопрос.
Дэвид Рааб

0

Если у вас возникли проблемы с неработающим параметром --coverage, это также может быть связано с тем, что у вас включены репортеры, не добавленные «text» или «text-summary». Из документации: «Примечание. Установка этого параметра перезаписывает значения по умолчанию. Добавьте« текст »или« текст-сводку », чтобы увидеть сводку покрытия в выходных данных консоли». Источник


0

Настройте файл package.json

"test": "jest --coverage",

введите описание изображения здесь

Теперь запустите:

yarn test

Все тесты начнутся, и вы получите отчет. введите описание изображения здесь


-1

У меня была такая же проблема, и я исправил ее, как показано ниже.

  1. установить пряжу npm install --save-dev yarn
  2. установить jest-cli npm install --save-dev jest-cli
  3. добавьте это в package.json "jest-coverage": "yarn run jest -- --coverage"

После написания тестов запустите команду npm run jest-охват. Это создаст папку покрытия в корневом каталоге. /coverage/icov-report/index.html содержит html-представление покрытия кода.

Удачного кодирования!


8
Нет необходимости устанавливать пряжу. Yarn - это просто другой пакетный менеджер по
Black

-10

Попробуйте наглость . Я только что его использовал. И я писал об этом в блоге о том, как интегрироваться в Visual Studio.

Вот как я сделал покрытие кода с помощью Chutzpah: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/


Chutzpath построен поверх Blanket, и я указал выше, что Jest с ним не работает.
Alex Palcuie

Интересно, потому что мой просто работал. francorobles.wordpress.com/2014/09/14/…
francorobles

1
Вы не используете Jest, который по умолчанию издевается над каждым require.
Alex Palcuie
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.