Покрытие кода с Мокко

Я использую Mocha для тестирования моего приложения NodeJS. Я не могу понять, как использовать функцию покрытия кода. Я попытался найти его, но не нашел подходящего учебника. Пожалуйста помоги.

4 ответа

Решение

Вам нужна дополнительная библиотека для покрытия кода, и вы будете поражены тем, насколько мощным и простым является Стамбул. Попробуйте выполнить следующее, после того как пройдете тесты мокко:

npm install nyc

Теперь просто поместите команду nyc перед существующей тестовой командой, например:

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

Теперь (2018) предпочтительным способом использования Стамбула является его "современный интерфейс командной строки" nyc.

Настроить

Во-первых, установите его в свой проект с

npm i nyc --save-dev

Затем, если у вас есть проект на основе npm, просто измените тестовый скрипт внутри scripts объект вашего файла package.json для выполнения покрытия кода ваших тестов мокко:

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

Бежать

Теперь запустите ваши тесты

npm test

и вы увидите такую ​​таблицу в консоли сразу после вывода результатов тестов:

Стамбул Nyc Мокко покрытие кода

настройка

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

Принятый ответ (nyc) не работает, если вы используете модули ESM.

C8 сейчас кажется лучшим решением, которое использует встроенные возможности NodeJS и использует istanbul (например, nyc, и использует одни и те же файлы конфигурации).

      npm install -g c8
c8 mocha

Он будет использовать .nycrc для конфигурации. Пример конфигурации, который я использую:

      {
    "all": true,
    "exclude": ["test"],
    "output": "reports",
    "reporter" : [
        "html",
        "text"
    ]
}

(Примечание: на c8 мне указал ответ на другой вопрос /questions/3818809/net-pokryitiya-nyu-jork-mokko/59623917#59623917)

Blanket.js тоже отлично работает.

npm install --save-dev blanket

перед вашим test/tests.js

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

бежать mocha -R html-cov > coverage.html

Другие вопросы по тегам