Alfa Brain

Как читать отчет о покрытии тестами, созданный с помощью Jest.

Алексей ВечкановАлексей Вечканов   

Jest поставляется с функцией создания отчетов, которые помогают нам понять покрытие тестами. Этот отчет включает покрытие выражений (statements), покрытие функций и покрытие ветвлений (braches).

Изображение статьи

Это один из примеров отчета о тестовом покрытии, созданного для тестового приложения. В этом отчете говорится, что он имеет 84% покрытие выражений (statements), 100% ветвей и 100% функций и 84% покрытие строк в целом. Так же, возможно посмотреть отчет по каждому файлу в отдельности.

Так что же такое покрытие выражений, веток, функций, строк? Каждый параметр отвечает на свой собственный вопрос.

Function coverage (Покрытие функций) Была ли вызвана каждая функция (или подпрограмма) в программе?
Statement coverage (Покрытие выражений) Выполнено ли каждое выражение в программе?
Branch coverage (Покрытие ветвлений/веток) Выполнена ли каждая ветвь (также называемая DD-путем) каждой управляющей структуры (например, в операторах if и case)? Например, для заданного оператора if были ли выполнены как истинная, так и ложная ветви? Другими словами, было ли выполнено каждое решение в программе?
Line coverage (Покрытие строк) Была ли выполнена каждая исполняемая строка в исходном файле?

Для каждого случая указанный процент представляет собой выполненный код по сравнению с невыполненным кодом (executed code vs not-executed code), который равен дроби в процентном формате (например: 50% ветвей, 1/2).

Далее мы можем щелкнуть отдельный компонент или файл src и увидеть отчет о конкретном файле.

Например, index.js не охватывается ни одним оператором.

Изображение статьи

В файле отчета:

«E» означает «else path not taken» (путь Если не применен), что означает, что для помеченного оператора if/else был проверен путь if, но не else.

Изображение статьи

«I» означает «if path not taken» (путь Если не применен), что означает что блок if не был проверен.

Изображение статьи

Nx в левом столбце — это количество раз, когда эта строка была выполнена.

Изображение статьи

Невыполненные строки или фрагменты кода будут выделены красным цветом.

Отчет также предоставляет цветовые подсказки.

Pink: выражения не покрыты (statements not covered) и функции не покрыты (functions not covered)

Yellow: ветви не покрыты (branch is not covered).

Некоторые гайды упоминают цвет Orange (который должен обозначать непокрытые функции), но я такого не встречал. Кажется это чья-то ошибка, которая тянется из гайда в гайд.

Изображение статьи

Так же если вы направите курсор мыши на выделенные элементы, html отчет подскажет вам о чем идет речь.

Изображение статьи

Заключение

Таким образом, тестовое покрытие помогает нам понять, насколько эффективны наши тесты, охватываем ли мы весь исходный код или нет. Важно заметить, что тестовый охват не говорит на сколько хороши наши тесты - все что говорит отчет - это отрабатывал ли код или нет. Справедливости ради, замелю что в большинстве случаев этого хватает, чтобы понять какая часть бизнес логики не покрыта тестами.



Поделиться: