Примечание от переводчика
Здесь содержится перевод файла code-coverage.md. Если при нажатии на ссылку, содержащую последние правки в master ветке AVA, Вы не можете найти файл code-coverage.md
, то можете считать что перевод актуален.
Переводы: Español, Français, Italiano, 日本語, Português
Так как AVA [запускает тестовые файлы в отдельном окружении][process-isolation], Вы не можете использовать istanbul
для покрытия кода; вместо этого, воспользуйтесь nyc
, который похож на istanbul
но с поддержкой запуска в отдельном окружении(sub-process).
Установите NYC:
$ npm install nyc --save-dev
Затем добавьте .nyc_output
и coverage
каталоги в Ваш .gitignore
файл.
.gitignore
:
node_modules
coverage
.nyc_output
Использовать NYC для покрытия кода, написанного в ES5 весьма просто. Просто добавьте в начало Вашего тестового скрипта nyc
:
{
"scripts": {
"test": "nyc ava"
}
}
Это все!
Если Вам нужно сделать HTML отчет о покрытии кода или залить данные о покрытии кода в Coveralls, Вы должны пролистать до нужных секций в этом документе.
Использование Babel транспиллера немного более сложно. Мы разбили описание на несколько этапов.
Во-первых, нам нужна Babel конфигурация. Пример ниже должен быть изменен под Ваши нужды.
package.json
:
{
"babel": {
"presets": ["es2015"],
"plugins": ["transform-runtime"],
"ignore": "test.js",
"env": {
"development": {
"sourceMaps": "inline"
}
}
}
}
На заметку - в примере выше есть две важные вещи.
-
Мы игнорируем тестовые файлы, так как AVA уже обрабатывает тесты, прошедшие через транспиллер.
-
Мы указали
inline
source maps для разработки. Это важно для корретной генерации покрытия кода. Использованиеenv
секции в конфигурации Babel позволяет нам отключить source maps для сборки на продуктиве.
Поскольку Вам вряд ли потребуется inline
source maps в production окружении, Вам необходимо указать альтернативное окружение в Ваших сборочных скриптах:
package.json
{
"scripts": {
"build": "BABEL_ENV=production babel --out-dir=dist index.js"
}
}
ВНИМАНИЕ:
BABEL_ENV=production
не работает на машинах с ОС Windows, Вы должны использоватьset
(set BABEL_ENV=production
). Для кросс-платформенных сборок, смотритеcross-env
.
Обратите внимание, что скрипт сборки имеет очень мало общего с AVA и это просто примеры, демонстрирующие установку 'env' для совместимости конфига Babel с AVA.
Для использование require хука в Babel, добавьте babel-core/register
в секцию require
конфига AVA в файле package.json
.
{
"ava": {
"require": ["babel-core/register"]
}
}
Замечание: Вы так же можете установить require хук используя командную строку: ava --require=babel-core/register
. Однако, конфигурирование через файл package.json
спасет Вас от постоянного набора этой строки в терминале.
Объединяя предыдущие шаги выше, Ваш файл package.json
должен быть похож на:
{
"scripts": {
"test": "nyc ava",
"build": "BABEL_ENV=production babel --out-dir=dist index.js"
},
"babel": {
"presets": ["es2015"],
"plugins": ["transform-runtime"],
"ignore": "test.js",
"env": {
"development": {
"sourceMaps": "inline"
}
}
},
"ava": {
"require": ["babel-core/register"]
}
}
NYC создает json
файл с покрытием кода для каждого дочернего процесса в каталоге .nyc_ouput
.
Для объединения этих файлов в читабельный HTML отчет, сделайте следующее:
$ ./node_modules/.bin/nyc report --reporter=html
Или используйте npm script:
{
"scripts": {
"report": "nyc report --reporter=html"
}
}
Эти команды создадут HTML отчет в каталоге coverage
.
Во-первых, Вы должны быть авторизированным в coveralls.io и активировать Ваш репозиторий кода.
После этого добавьте coveralls
как development зависимость:
$ npm install coveralls --save-dev
Добавьте следующие строки в Ваш .travis.yml
файл:
after_success:
- './node_modules/.bin/nyc report --reporter=text-lcov | ./node_modules/.bin/coveralls'
Ваш отчет о покрытии появится в Coveralls вскоре, после тогда как завершится сборка в Travis.