Покриття коду для Jest


131

Чи є спосіб покриття коду в рамках тестування Javascript Jest, який побудований на вершині Жасмін?

Внутрішня рамка не роздруковує покриття коду, яке воно отримує. Я також намагався використовувати Стамбул , ковдру та JSCover , але жоден з них не працює.


Я не дуже жартую, але ви бачили config.collectCoverage ?
Ciro Costa

Відповіді:


123

Під час використання Jest 21.2.1 я бачу покриття коду в командному рядку та створюю каталог покриття, переходячи --coverageдо сценарію Jest. Нижче наведено кілька прикладів:

Я схильний встановлювати Jest локально, і в цьому випадку команда може виглядати так:

npx jest --coverage

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

jest --coverage

Дуже рідкісні документи знаходяться тут

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


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

Як отримати прикриття лише для змінених файлів?
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"
 }

Також переконайтеся, що ввімкнено покриття у вашій програмі package.json jer, а також ви можете вказати потрібні формати. (Html ​​- досить погана дупа).

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

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

Або додайте, --coverageколи ви викликаєте жарт.


1
Опція CoverFormats була видалена - схоже, що json та html створюються щоразу.

1
Я використовую варіант --coverage, але абсолютно нічого іншого не відбувається.
gbbr

3
Це (зараз) називається, coverageReportersа за замовчуванням - ["json", "lcov", "text"]. Дивіться facebook.github.io/jest/docs/…
Карстен С.

не працюйте, невідома опція "покриттяФормати" зі значенням ["json", "html"] знайдена.
srghma

40

Січень 2019: Jest версія 23.6

Для тих, хто останнім часом розглядає це питання, особливо, якщо тестувати з використанням npmчи yarnбезпосередньо

Наразі вам не потрібно змінювати параметри конфігурації

Відповідно до офіційного веб-сайту , ви можете зробити наступне для створення звітів про покриття:

1- Для п / х:

Ви повинні поставити --перед тим, як передавати --coverageаргумент жарту

npm test -- --coverage

якщо ви спробуєте викликати --coverageбезпосередньо без нього, --це не спрацює

2- Для пряжі:

Ви можете передати --coverageаргумент жарту безпосередньо

yarn test --coverage

1
Як отримати прикриття лише для змінених файлів?
Шаніка Едірівеера

Змінено з того часу, коли? Напевно, ви хочете використовувати --watchдля цього налаштування.
koehn

1
Ця відповідь робить багато припущень щодо стану таких package.json.
airtonix

6

Добре, ігноруйте мою попередню відповідь, оскільки хтось сказав мені, що це не вирішує проблему.

Нова відповідь:

1) Перевірте найновіший жарт (v 0,22): https://github.com/facebook/jest

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

3) Виконавши жарт, ви можете отримати звіт про покриття на консолі та під кореневою папкою, встановленою жартом, ви знайдете звіт про покриття у форматі json та html.

4) FYI, якщо ви встановлюєте з npm, ви не можете отримати останню версію; тому спробуйте спочатку github і переконайтесь, що покриття - те, що вам потрібно.


Стара відповідь:

Маю таку ж проблему. Коротка відповідь: Istanbulі JestНЕ працюють разом.

Перегляньте наступні сторінки для отримання більш детальної інформації:

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

jest використовує контекстуючий, який запускає сценарії JS у контексті V8 в кодовому коді, тим самим обминаючи всі вимоги та vm.runInThisContext. Таким чином, кришка istanbul не працюватиме, оскільки не використовуються стандартні функції hookable node.js, а файли попереднього інструменту не допоможуть, оскільки кожен тест запускається у власній пісочниці, і немає глобальної, в якій би зберігати об'єкт покриття.

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


Питання полягало в тому, як отримати покриття коду для Jest. Те, що Стамбул і Джест не працюють разом, може бути правдою, але це не відповідає на питання.
Девід Рааб

0

Якщо у вас виникають проблеми з --coverage не працює, це також може бути пов’язане з тим, що увімкнено репортаж покриття без додавання "текст" або "текстовий підсумок". З документів: "Примітка. Якщо встановити цей параметр, перезаписує значення за замовчуванням. Додайте" текст "або" текстовий підсумок ", щоб побачити підсумок покриття у консольному виході." Джерело


0

Налаштуйте файл package.json

"test": "jest - покриття",

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

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

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, виконайте vic-cover. Це створить папку покриття в кореневому каталозі. /coverage/icov-report/index.html має html-вигляд покриття коду.

Щасливого кодування!


8
Немає необхідності встановлювати пряжу. Пряжа - це просто інший менеджер пакунків для NPM
Чорний

-10

Спробуйте Chutzpah . Я тільки що користувався. І я блогів про це, як інтегруватися у Visual Studio.

Ось як я зробив покриття коду Chutzpah: http://francorobles.wordpress.com/2014/09/14/code-coverage-with-chutzpah/


Chutzpath побудований поверх ковдри, і я вказав вище, що Jest не працює з цим.
Алекс Палкуей

Цікаво, бо моя тільки працювала. francorobles.wordpress.com/2014/09/14/…
francorobles

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