Подтвердить что ты не робот

Как я могу прочитать отчет о покрытии в Стамбуле?

Я всегда использовал 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 |
-------------------|-----------|-----------|-----------|-----------|
4b9b3361

Ответ 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 вашего теста. Нажмите на нее и просмотрите в браузере. Вы должны увидеть что-то вроде этого

Изображение, показывающее вывод результатов вашего теста

Я надеюсь, что это поможет вам лучше понять это.