Насколько хватит тестирования?

Иногда мы создаем несколько модульных тестов для нашего приложения, чтобы протестировать наши сервисы, но мы не знаем ответов на эти вопросы: достаточно ли мы создали модульных тестов? Мы создали слишком много тестов?

Jest: Отчет об охвате

Популярные фреймворки JavaScript могут использовать Facebook Jest для выполнения модульных тестов.

Jest имеет функцию отчета о покрытии, которая позволяет нам проверять, охватывает ли наш код все строки файлов, которые мы выбираем, путем создания HTML-файла, который мы можем открыть.

В моем случае я решил покрыть службы, которые находятся в папке служб. Эти службы связаны с пользователями и назначениями, например AuthenticateUser, UpdateUserAvatar и CreateAppointment.

Наш HTML-файл показывает нам, что у нас почти достаточно модульных тестов для наших сервисов, связанных с пользователями, и что у нас нет никаких модульных тестов для наших сервисов, связанных с встречами.

Если мы нажмем на встречи / услуги, мы увидим более подробную информацию, показывающую статистику охвата по каждой услуге, связанной с встречами.

  • Ветви представляют собой утверждения if, условия которых были выполнены хотя бы один раз во время модульных тестов.
  • Функции представляют собой функции, которые были вызваны хотя бы один раз во время модульных тестов.
  • Строки представляют собой строки кода, которые выполнялись хотя бы один раз во время модульных тестов.
  • Операторы представляют собой инструкции, которые были выполнены хотя бы один раз во время модульных тестов. Например, у нас может быть строка, содержащая два оператора:
var age= 18; console.log(age)
//It contains a variable declaration statement and a statement that executes the log function that belongs to the console object.

Если мы щелкнем по CreateAppointmentService.ts, мы сможем увидеть каждую строку кода, содержащуюся в этом файле.

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

Если мы вернемся к начальному экрану и щелкнем по пользователям / службам, мы увидим более подробную информацию, показывающую статистику охвата по каждой службе, связанной с пользователями. Можно увидеть, что одни покрыты полностью, а другие - частично.

Если мы проанализируем строки кода в файле CreateAppointmentService.ts, мы увидим 1x слева, это означает, что мы выполнили это часть кода один раз во время наших модульных тестов. Это происходит потому, что я тестировал только одно из функциональных требований в своих модульных тестах: «Не разрешать неаутентифицированным пользователям изменять свой аватар».

Обратите внимание, что в строке 31 есть символ E. Это означает, что мы не вводили его во время наших модульных тестов (иначе путь не выбран).

Также обратите внимание, что есть часть строки 42, которая выделена желтым. Это означает, что возможная ветвь не покрыта.

Если мы проанализируем строки кода в файле CreateUserService.ts, мы увидим 3x и 4x в разных местах слева, это означает, что мы выполнили некоторые части код по-другому во время наших модульных тестов. Это происходит потому, что я тестировал несколько различных функциональных требований в своих модульных тестах. Примеры моих требований:

  • «Должен быть в состоянии создать новую встречу».
  • «Нельзя одновременно создавать две встречи».

Поддерживать связь

Свяжитесь со мной через мои социальные сети. Поговорим о юнит-тестах и ​​программировании в целом, будь то LinkedIn или GitHub.

Расскажите нам, какие инструменты вы используете для улучшения своих тестов.