Примечание от переводчика
Здесь содержится перевод файла 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 уже обрабатывает тесты, прошедшие через транспиллер.
-
Мы указали
inlinesource 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.