Покрытие кода с Мокко
Я использую 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
и вы увидите такую таблицу в консоли сразу после вывода результатов тестов:
настройка
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