Я всегда использовал Jasmine для своих модульных тестов, но недавно я начал использовать Istanbul, чтобы предоставлять отчеты о покрытии кода. Я имею в виду, что я понимаю суть того, что они пытаются мне сказать, но я действительно не знаю, что представляет каждый из этих процентов (Stmts, Branch, Funcs, Lines). До сих пор в Google мне не удалось найти надежного объяснения / ресурса.
Вопрос : Как я уже сказал, я понял суть, но может ли кто-нибудь опубликовать правильное объяснение или ссылку на правильное объяснение?
Третичный вопрос : есть ли способ определить, какие конкретные части вашего кода не охвачены? Пока, не вдаваясь в подробности этого отчета, я в основном предполагаю.
-------------------|-----------|-----------|-----------|-----------|
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 |
-------------------|-----------|-----------|-----------|-----------|
javascript
testing
jasmine
code-coverage
istanbul
Скотт меч
источник
источник
Ответы:
Существует ряд критериев покрытия, основными из которых являются:
Для каждого случая процент представляет собой выполненный код по сравнению с невыполненным кодом , что соответствует каждой доле в процентном формате (например: 50% ветвей, 1/2).
В файле отчета:
'E'
означает «путь else не принят», что означает, что для отмеченного оператора if / else путь «if» был протестирован, но не путь «else».'I'
означает «если путь не выбран», что является противоположным случаем: «если» не проверялось.xN
левом столбце указано количество выполнений этой строки.Это было проверено для Istanbul v0.4.0, я не уверен, применимо ли это к последующим версиям, но поскольку эта библиотека основана на твердых теоретических принципах, поведение не должно слишком сильно меняться для новых версий.
Он также предоставляет несколько цветовых кодов -
Розовый : заявления не включены.
Оранжевый : функции не рассматриваются.
Желтый : ветви не прикрыты.
Полная документация по Стамбулу здесь:
https://istanbul.js.org
Для более углубленной теории покрытия кода:
https://en.wikipedia.org/wiki/Code_coverage
Надеюсь, поможет!
источник
Запуск istanbul должен также создать HTML-файл для отчета (должен находиться в папке покрытия). Этот HTML-код должен предоставлять вам подробную информацию, когда вы нажимаете на файлы / папки.
Процент охваченных функций рассчитывается путем деления количества функций, вызванных во время тестов, на общее количество функций. То же самое касается строк и операторов (которые обычно будут близки друг к другу, если у вас нет очень длинных операторов). Ветви означают точки принятия решений, такие как
if-else
блоки. Например, предположим, что ваш код содержит только одинif-else
оператор, и ваши тесты проходят только черезif
часть, но не черезelse
часть, тогда процент ваших ветвей должен быть 50%.Надеюсь, это проясняет ситуацию.
источник
"test" : "nyc mocha"
вpackage.json
. Моя папка покрытия пуста. Мысли?"test" : "nyc --reporter=html mocha"
Добавление к предыдущим ответам
% Утверждений рассчитывается путем взятия процента от количества утверждений, охваченных вашим тестом, например, 12/18 * 100 = 66,67%. Это означает, что ваш тест охватил только 66,67%.
Таким же образом рассчитывается% Branch. То же самое для ваших функций% и строк%.
В корневом каталоге вашего проекта есть папка покрытия, содержащая HTML-вывод вашего теста. Щелкните по нему и просмотрите в браузере. Вы должны увидеть что-то вроде этого
Изображение, показывающее результат вашего теста
Надеюсь, это поможет вам лучше понять это.
источник