Покрытие кода для 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.