Как я могу прочитать отчет о покрытии в Стамбуле?
Я всегда использовал Jasmine для своих модульных тестов, но недавно я начал использовать Стамбул, чтобы дать мне отчеты о покрытии кода. Я имею в виду, что я понимаю суть того, что они пытаются мне сказать, но я не знаю, что представляет собой каждый из этих процентов (Stmts, Branches, Funcs, Lines). До сих пор Googling я не смог найти надежное объяснение/ресурс.
Вопрос. Как я уже сказал, я понял суть этого вопроса, но может ли кто-нибудь опубликовать соответствующее объяснение или ссылку на правильное объяснение?
Третичный вопрос. Есть ли способ определить, какие конкретные части вашего кода не охвачены? До сих пор я действительно не догадывался об этом докладе.
-------------------|-----------|-----------|-----------|-----------|
File | % Stmts |% Branches | % Funcs | % Lines |
-------------------|-----------|-----------|-----------|-----------|
controllers/ | 88.1 | 77.78 | 78.57 | 88.1 |
dashboard.js | 88.1 | 77.78 | 78.57 | 88.1 |
-------------------|-----------|-----------|-----------|-----------|
All files | 88.1 | 77.78 | 78.57 | 88.1 |
-------------------|-----------|-----------|-----------|-----------|
Ответы
Ответ 1
Существует ряд критериев покрытия, основными из которых являются:
- Охват функций Была ли вызвана каждая функция (или подпрограмма) в программе?
- Охват операторов Каждый оператор в программе был выполнен?
- Покрытие ветвей Была ли выполнена каждая ветвь (также называемая DD-path) каждой управляющей структуры (например, в операторах if и case)? Например, если дан оператор if, выполнялись ли ветки true и false? Еще один способ сказать, что каждое ребро в программе было выполнено?
- Строка была ли выполнена каждая исполняемая строка в исходном файле?
Для каждого случая процент представляет исполняемый код против неисполненного кода, который равен каждой фракции в процентном формате (например, 50% ответвлений, 1/2).
В файле отчета:
'E'
расшифровывается как "еще не выбран путь", что означает, что для отмеченного оператора if/else был проверен путь "if", но не "else".
'I'
означает "если путь не выбран", что является противоположным случаем: "если" не было проверено.
xN
в левом столбце - количество выполнений этой строки.
- Не выполненные строки или фрагменты кода будут выделены красным цветом.
Это было проверено для Istanbul v0.4.0, я не уверен, применимо ли это к последующим версиям, но поскольку эта библиотека основана на твердых теоретических принципах, поведение не должно слишком сильно изменяться для более новых версий.
Он также предоставляет некоторые цветовые коды -
Розовый: заявления не покрыты.
Оранжевый: функции не включены.
Желтый: ветки не покрыты.
Полный Стамбул документы здесь:
https://istanbul.js.org
Для более подробной теории покрытия кода:
https://en.wikipedia.org/wiki/Code_coverage
Надеюсь, это поможет!
Ответ 2
Запуск istanbul также должен содержать HTML файл для отчета (должен быть в папке покрытия). Этот HTML-код должен содержать информацию о детализации при нажатии на файлы/папки.
Процент покрываемых функций рассчитывается по числу функций, которые были вызваны во время тестов, деленному на общее количество функций. То же самое относится к строкам и операторам (которые обычно будут близки друг к другу, если у вас очень длинные заявления).
Филиалы означают такие точки принятия решений, как if-else
. Например, предположим, что ваш код содержит только один оператор if-else
, и ваши тесты проходят только через часть if
, но не часть else
, тогда ваш процент ветвей должен быть 50%.
Надеюсь, что это станет проще.
Ответ 3
Добавление к предыдущим ответам
% Утверждений рассчитывается путем взятия процента от числа утверждений, охватываемых вашим тестом, например, 12/18 * 100 = 66,67%. Это означает, что ваш тест покрыл только 66,67%.
% Branch также рассчитывается аналогичным образом. То же самое для ваших% функций и% линий.
В корневом каталоге вашего проекта есть папка покрытия, содержащая вывод HTML вашего теста. Нажмите на нее и просмотрите в браузере. Вы должны увидеть что-то вроде этого
Изображение, показывающее вывод результатов вашего теста
Я надеюсь, что это поможет вам лучше понять это.