Покрытие кода для 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, который можно было загрузить в браузер. Он включал информацию, напечатанную в командной строке, а также дополнительную информацию и некоторые графические данные.

ccalvert
источник
7
Никогда не используйте глобальные модули. Чтобы обеспечить согласованность версий и наличие пакета, всегда используйте исполняемый файл в node_modulesvia ./node_modules/.bin/jest --coverage. Пока пакет назван в package.json, вы можете гарантировать выполнение именно той версии шутки, которую ожидаете.
taystack
Как получить шутливое освещение только для измененных файлов?
Shanika Ediriweera
Есть ли простой способ не пройти тесты, если охват ниже определенного предела? Соответствующий SO-вопрос: stackoverflow.com/questions/60512167/…
Стефан
@ShanikaEdiriweera jestjs.io/docs/en/cli.html#--collectcoveragefromglob
marcellothearcane
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». Из документации: «Примечание. Установка этого параметра перезаписывает значения по умолчанию. Добавьте« текст »или« текст-сводку », чтобы увидеть сводку покрытия в выходных данных консоли». Источник

thebkr7
источник
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-представление покрытия кода.

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

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

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

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

francorobles
источник
Chutzpath построен поверх Blanket, и я указал выше, что Jest с ним не работает.
Alex Palcuie
Интересно, потому что мой просто работал. francorobles.wordpress.com/2014/09/14/…
francorobles
1
Вы не используете Jest, который по умолчанию издевается над каждым require.
Alex Palcuie