Як прочитати звіт про стамбульське покриття?


131

Я завжди використовував Жасмін для моїх одиниць тестів, але останнім часом я почав використовувати Стамбул, щоб дати мені звіти про покриття коду. Я маю на увазі, що я отримую суть того, що вони намагаються сказати мені, але я не знаю, що собою являє кожен із цих відсотків (Stmts, Branches, Funcs, Lines). Поки що в Google 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 |
-------------------|-----------|-----------|-----------|-----------|

3
Запуск istanbul також повинен створити HTML-файл для звіту (повинен бути в папці покриття). Цей HTML повинен дати вам детальну інформацію при натисканні на файли / папки
Yaron Schwimmer

Дякую @yarons. Це, безумовно, допомагає детально вивчити покриття та визначити, що конкретно не покривається. Я все ще не знаю глибоко, що означають відсотки = /.
Скотт Меч

Відповіді:


217

Існує ряд критеріїв покриття, основними з яких є:

  • Функціональне покриття Чи була викликана кожна функція (або підпрограма) в програмі?
  • Покриття заяви Чи виконано кожне твердження в програмі?
  • Покриття відділення гілки Чи виконувалась кожна гілка (також звана DD-шлях) кожної керуючої структури (наприклад, у операторах if та case)? Наприклад, з урахуванням заяви if, чи виконувались і справжні, і хибні гілки? Ще один спосіб сказати це: чи було виконано кожен край програми?
  • Покриття лінії чи виконується кожна виконувана рядок у вихідному файлі?

Для кожного випадку відсоток представляє виконаний код проти невиконаного коду , який дорівнює кожному дробу у відсотковому форматі (наприклад: 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

Сподіваюся, це допомагає!


8

Запуск istanbul також повинен створити HTML-файл для звіту (повинен бути в папці покриття). Цей HTML повинен надавати детальну інформацію при натисканні на файли / папки.

Відсоток охоплених функцій обчислюється числом функцій, які були викликані під час тестів, поділеним на загальну кількість функцій. Те ж саме стосується рядків і висловлювань (які зазвичай будуть близькі один до одного, якщо у вас немає дуже довгих тверджень). Гілки означають точки вирішення, як if-elseблоки. Наприклад, скажімо, що ваш код містить лише одне if-elseтвердження, а ваші тести проходять лише ifчастину, але не її elseчастину, то відсоток ваших гілок повинен становити 50%.

Сподіваюсь, що робить речі зрозумілішими.


Я пробіг Істанбул, вказавши "test" : "nyc mocha"в package.json. Моя папка покриття порожня. Думки?
TheCrazyProgrammer

1
Я додав HTML-репортер. Це працює і зараз. "test" : "nyc --reporter=html mocha"
TheCrazyProgrammer

Як приклад: якщо у вас є велика if-гілка та крихітна else-гілка, і було запущено лише if-гілку, покриття рядків буде виглядати чудово, але покриття гілки все одно буде лише 50%. Крім того, ви можете мати кілька висловлювань на рядок, якщо оператори розділені крапками з комою або якщо рядок містить визначення функції (яке містить власні оператори). Ви можете мати кілька рядків на оператор, якщо у оператора є розриви рядків до остаточної крапки з комою.
Hew Wolff

0

Додавання до попередніх відповідей

% Звітів обчислюється, беручи відсоток від кількості тверджень, охоплених вашим тестом, наприклад 12/18 * 100 = 66,67%. Це означає, що ваш тест покрив лише 66,67%.

% Відділення також розраховується аналогічно. Те саме для ваших% функцій та% рядків.

У кореневому каталозі вашого проекту є папка покриття, яка містить вихід HTML у вашому тесті. Клацніть по ньому і перегляньте його в браузері. Ви повинні побачити щось подібне

Зображення, що показує результати результатів тесту

Я сподіваюся, що це допоможе вам зрозуміти це краще.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.