deno coverage
deno coverage создает отчеты о покрытии на основе данных, собранных с помощью deno test --coverage.
Включение и исключение файлов
По умолчанию в отчет о покрытии включается любой ваш код, расположенный в локальной файловой системе, а также его импорты.
Вы можете настроить включение и исключение файлов с помощью параметров --include и --exclude.
Вы можете включить в отчет файлы, которых нет в локальной файловой системе, с помощью параметра --include и настройки шаблона регулярного выражения.
deno coverage --include="^file:|https:"
Шаблон включения по умолчанию подходит для большинства случаев, но вы можете настроить его, чтобы точнее указать, какие файлы включать в отчет о покрытии.
Файлы, в именах которых содержится test.js, test.ts, test.jsx или test.tsx, по умолчанию исключаются.
Это эквивалентно следующему:
deno coverage --exclude="test\.(js|mjs|ts|jsx|tsx)$"
Эта настройка по умолчанию не позволяет тестовому коду влиять на отчет о покрытии. Чтобы URL-адрес соответствовал условиям, он должен соответствовать шаблону включения и не соответствовать шаблону исключения.
Игнорирование кода
Чтобы исключить код из создаваемых отчетов о покрытии, добавьте комментарии для игнорирования покрытия. Ветки и строки в игнорируемом коде исключаются из отчета. Игнорируемые ветки и строки не считаются покрытыми. Вместо этого игнорируемые строки кода считаются пустыми.
Чтобы игнорировать целый файл, добавьте в начало файла комментарий // deno-coverage-ignore-file.
// deno-coverage-ignore-file
// all code in this file is ignored
Игнорируемые файлы не отображаются в отчете о покрытии.
Чтобы игнорировать одну строку, добавьте комментарий // deno-coverage-ignore в строке непосредственно над кодом, который нужно игнорировать.
// deno-coverage-ignore
console.log("this line is ignored");
Чтобы игнорировать несколько строк, добавьте комментарий // deno-coverage-ignore-start над кодом, который нужно игнорировать, и комментарий // deno-coverage-ignore-stop под ним.
// deno-coverage-ignore-start
if (condition) {
console.log("both the branch and lines are ignored");
}
// deno-coverage-ignore-stop
Весь код после комментария // deno-coverage-ignore-start игнорируется до тех пор, пока не встретится // deno-coverage-ignore-stop.
Каждый комментарий // deno-coverage-ignore-start должен завершаться комментарием // deno-coverage-ignore-stop, а игнорируемые диапазоны не могут быть вложенными. Если эти требования не соблюдены, некоторые строки могут случайно попасть в отчет о покрытии. Команда deno coverage выводит предупреждения о некорректных комментариях.
// deno-coverage-ignore-start
if (condition) {
// deno-coverage-ignore-start - A warning will be logged because the previous
// coverage range is unterminated.
console.log("this code is ignored");
// deno-coverage-ignore-stop
}
// deno-coverage-ignore-stop
// ...
// deno-coverage-ignore-start - This comment will be ignored and a warning will
// be logged, because this range is unterminated.
console.log("this code is not ignored");
Перед директивой покрытия в комментарии могут находиться только пробельные символы. После директивы может располагаться любой текст.
// deno-coverage-ignore Trailing text is allowed.
console.log("This line is ignored");
// But leading text isn't. deno-coverage-ignore
console.log("This line is not ignored");
Комментарии для покрытия должны начинаться с //. Комментарии, начинающиеся с /*, не являются допустимыми комментариями для покрытия.
// deno-coverage-ignore
console.log("This line is ignored");
/* deno-coverage-ignore */
console.log("This line is not ignored");
Покрытие функций
В сводную таблицу и HTML-отчет наряду со столбцами ветвей и строк добавлен столбец покрытия функций:
---------------------------------------------
File | Branch % | Line % | Function %
---------------------------------------------
main.ts | 85.7 | 92.3 | 100.0
util.ts | 75.0 | 88.5 | 66.7
---------------------------------------------
all files | 80.0 | 90.5 | 83.3
---------------------------------------------
Покрытие функций показывает процент объявленных функций, вызванных хотя бы один раз во время выполнения тестов. Эти же данные доступны в выводе lcov.
Пороговые значения покрытия
По умолчанию deno coverage и deno test --coverage завершаются с кодом 0 независимо от того, насколько низки показатели. Чтобы проверять покрытие в CI, задайте минимальный порог: команда завершится с ненулевым кодом, если покрытие окажется ниже этого значения.
Передайте --threshold команде deno coverage, указав целое число в процентах. Это значение применяется ко всем трем показателям из сводной таблицы: покрытию строк, ветвей и функций.
deno coverage --threshold=90
Если вы собираете и проверяете покрытие за один шаг, передайте --coverage-threshold команде deno test:
deno test --coverage --coverage-threshold=90
Чтобы задать разные целевые значения для каждого показателя, добавьте раздел coverage в deno.json. Все ключи в разделе thresholds необязательны и принимают дробное значение в процентах:
{
"coverage": {
"thresholds": {
"lines": 90,
"branches": 80,
"functions": 90
}
}
}
Для показателя, у которого не задан порог, проверка не выполняется, поэтому branches: 80 проходит для файла без ветвей. Проверка выполняется по совокупным данным всех файлов в отчете с использованием тех же значений, что и в сводной таблице.
При передаче флага CLI его единственное значение применяется к покрытию строк, ветвей и функций и переопределяет заданные в конфигурации значения для каждого показателя. Если флаг не передан, используются значения deno.json для отдельных показателей.
Форматы вывода
По умолчанию поддерживается собственный формат покрытия Deno, но вы также можете создавать отчеты о покрытии в формате lcov (стандартном формате файлов для описания данных о покрытии кода) или в формате HTML.
deno coverage --lcov --output=cov.lcov
Этот файл lcov можно использовать с другими инструментами, поддерживающими формат lcov.
deno coverage --html
В результате будет создан отчет о покрытии в формате HTML.
Примеры
Создать отчет о покрытии на основе профиля покрытия по умолчанию в рабочей области
deno test --coverage
deno coverage
Создать отчет о покрытии на основе профиля покрытия с пользовательским именем
deno test --coverage=custom_profile_name
deno coverage custom_profile_name
Примечание: каталог покрытия также можно задать с помощью переменной окружения
DENO_COVERAGE_DIR.DENO_COVERAGE_DIR=custom_profile_name deno test deno coverage custom_profile_name
Включить только покрытие, соответствующее определенному шаблону, — в данном случае включить только тесты из main.ts
deno coverage --include="main.ts"
Экспортировать покрытие тестов из профиля покрытия по умолчанию в файл lcov
deno test --coverage
deno coverage --lcov --output=cov.lcov
deno coverage [OPTIONS] [files]...Вывести отчеты о покрытии из профилей покрытия.
Собрать профиль покрытия с помощью deno test:
deno test --coverage=cov_profile
Вывести отчет в stdout:
deno coverage cov_profile
Включить URL-адреса, начинающиеся со схемы file, и исключить файлы, оканчивающиеся на test.ts и test.js. Чтобы URL-адрес соответствовал условиям, он должен соответствовать шаблону включения и не соответствовать шаблону исключения:
deno coverage --include="^file:" --exclude="test\.(ts|js)" cov_profile
Записать отчет в формате lcov:
deno coverage --lcov --output=cov.lcov cov_profile/
Создать HTML-отчеты из lcov:
genhtml -o html_cov cov.lcov
Параметры
--detailedВывести подробный отчет о покрытии в терминал.
--exclude<regex>
Исключить исходные файлы из отчета.
--htmlВывести отчет о покрытии в формате HTML в указанную директорию.
--ignore<ignore>
Игнорировать файлы покрытия.
--include<regex>
Включить исходные файлы в отчет.
--lcovВывести отчет о покрытии в формате lcov.
--output<output>
Экспортировать отчет о покрытии в формате lcov в указанный файл. Если аргумент --output не задан, отчет выводится в stdout.
--threshold<PERCENT>
Завершиться с ошибкой, если покрытие ниже указанного процента (0–100); значение применяется к покрытию строк, ветвей и функций. Пороговые значения для отдельных показателей можно задать в deno.json в разделе "coverage": { "thresholds": { ... } }. Флаг имеет приоритет.
Последнее обновление:
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/reference/cli/coverage