Кодове покриття Mocha


288

Я використовую Mocha для тестування моєї програми NodeJS. Я не в змозі зрозуміти, як використовувати його функцію покриття коду. Я спробував googling це, але не знайшов належного підручника. Будь ласка, допоможіть.

Відповіді:


410

Вам потрібна додаткова бібліотека для висвітлення коду, і ви будете роздуті тим, наскільки потужним і легким є Стамбул . Спробуйте виконати наступне, після того як ви пройдете тести на мокко:

npm install nyc

Тепер просто поставте команду nyc перед наявною тестовою командою, наприклад:

{
  "scripts": {
    "test": "nyc mocha"
  }
}

30
А якщо ви користуєтеся локально встановленою версією mocha, спробуйте istanbul cover node_modules/mocha/bin/_mocha.
Ерік Маккарті

102
Або встановіть і istanbul, і mocha локально, і додайте наступне до розділу сценаріїв свого пакета package.json, а потім просто npm запускайте покриття: "покриття": "./node_modules/istanbul/lib/cli.js cover ./node_modules/ mocha / bin / _mocha - --ui bdd -R spec -t 5000
Dan Kohn

6
У мене виникли проблеми з отриманням цієї команди для запуску на Windows, але, вказавши повний шлях до сміттєвого ящика, я зміг змусити його працювати. istanbul.cmd cover C:\Users\{UserName}\AppData\Roaming\npm\node_modules\mocha\bin\_mocha
Jason Jarrett

4
$(npm bin)є канонічним ярликом до папки Bin ./node_modules/.bin/і istanbul/lib/cli.jsйого псевдонім istanbul. Тож ось коротша команда:$(npm bin)/istanbul cover $(npm bin)/_mocha -- --ui bdd -R spec -t 5000
Генрі Блайт

19
@ Користувачі Windows:istanbul cover node_modules/mocha/bin/_mocha -- -R spec
Pier-Luc Gendreau

150

Зараз ( 2020 р. ) Кращим способом використання istanbul є його "сучасний інтерфейс командного рядка" nyc .

Налаштування

Спочатку встановіть його у своєму проекті

npm i nyc --save-dev

Потім, якщо у вас є проект на основі npm, просто змініть тестовий скрипт усередині scriptsоб'єкта файлу package.json, щоб виконати покриття коду ваших тестів Mocha :

{
  "scripts": {
    "test": "nyc --reporter=text mocha"
  }
}

Біжи

Тепер запустіть свої тести

npm test

і ви побачите таку таблицю на вашій консолі відразу після виведення тестів:

Покриття коду Istanbul Nyc Mocha

Настроювання

Звіт Html

Просто використовуйте

nyc --reporter=html

замість text. Тепер він виготовить звіт всередині ./coverage/index.html.

Формати звітів

Стамбул підтримує широкий спектр форматів звітів. Просто перегляньте його бібліотеку звітів, щоб знайти найбільш корисну для вас. Просто додайте --reporter=REPORTER_NAMEпараметр для кожного потрібного формату. Наприклад, с

nyc --reporter=html --reporter=text

у вас буде консоль та html-звіт.

Не запускайте покриття тестом npm

Просто додайте інший скрипт у свій package.jsonі залиште його testлише у вашому тестовому запуску (наприклад, мокка):

{
  "scripts": {
    "test": "mocha",
    "test-with-coverage": "nyc --reporter=text mocha"
  }
}

Тепер запустіть цей спеціальний сценарій

npm run test-with-coverage

запускати тести з покриттям коду.

Примусовий тест не виконаний, якщо покриття коду низьке

Не вдалося, якщо загальне покриття коду нижче 90%:

nyc --check-coverage --lines 90 

Не вдалося, якщо охоплення коду принаймні одним файлом нижче 90%:

nyc --check-coverage --lines 90 --per-file

2
Це відмінно працює для жасмин також: «NYC --reporter = HTML жасмин»
Sandip Субедей

12
дякую за додавання "зараз (2017)" - дуже корисно у цьому швидкозмінному світі JavaScript
kamahl

2
У випадку, якщо хтось ще заплутався - схоже, що nstan сховище istanbul було витіснене nyc . Відповідно до перерахованих залежностей, Істанбул був розбитий на різні пакети, які зберігаються у монорепо
aaaaaa

1
У мене --reporter=htmlввімкнено, але файл HTML завжди порожній, нічого не показано про непокриті блоки або% покриті і т. Д., Просто заголовки таблиці
TGW

2
Отже ... рамка під назвою Стамбул, командою якої є CLI - NYC? Помилка ... Я не вірю!
Тіві

19

Blanket.js теж ідеально працює.

npm install --save-dev blanket

перед вашим тестом / test.js

require('blanket')({
    pattern: function (filename) {
        return !/node_modules/.test(filename);
    }
});

бігати mocha -R html-cov > coverage.html


need ('blanket') ({шаблон: функція (назва файлу) {return! /node_modules/.test (назва файлу);}});
jsan

4
Станом на 2015 рік, blanket.js більше не підтримується та не підтримує ES6. Стамбул настійно не рекомендується.
teroi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.