DevGang
Авторизоваться

Освоение модульного тестирования с помощью NestJS

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

Предварительные условия

Прежде чем погрузиться в модульное тестирование, убедитесь, что у вас есть базовое представление о Node.js, NestJS, Jest и MongoDB.

Настройка среды

Для начала давайте настроим среду, создав файл book.service.ts. Кроме того, мы установим и импортируем все необходимые зависимости и создадим класс BookService.

Далее приступим к разработке функции генерации новой записи книги с использованием MongoDB и библиотеки Mongoose.

Затем разработайте функцию для поиска книги по ее идентификатору.

Аналогично, создайте функцию для обновления книги.

Наконец, создайте функцию для удаления книги.

Unit-тестирование BookService

Теперь, когда мы углубимся в процесс модульного тестирования класса BookService, наша цель — убедиться, что каждая функция работает именно так, как задумано.

Инициализация среды тестирования

Сначала создайте файл book.service.spec.ts в том же каталоге, что и файл book.service.

При модульном тестировании NestJS классы Test и TestingModule из @nestjs/testing устанавливают среду тестирования. Для имитации взаимодействия с базой данных используется функция getModelToken из @nestjs/mongoose. С помощью функции jest.fn() создается макет BookService для отслеживания вызовов методов. Этот макет службы и моделируемая модель базы данных предоставляются путем настройки модуля тестирования с помощью getModelToken(Book.name). После компиляции доступ к экземпляру и модели BookService осуществляется с помощью метода Module.get().

Тестирование функции 'create' BookService

В этом тестовом сценарии мы создаем макет объекта, имитирующий новую книгу. Затем мы создаем макет реализации функции create в модели для решения с помощью нашей предопределенной макетной книги. Вызывая функцию create нашей службы с данными макетной книги, мы гарантируем, что служба отвечает ожидаемым образом. Оператор expect подтверждает, что результат соответствует нашей предопределенной макетной книге, тем самым проверяя правильность функции create. Также инициализируйте все необходимые зависимости.

Тестирование функции 'findById' BookService

В этом тестовом сценарии мы начинаем с импорта основных зависимостей и создания объекта mockBook. Этот объект будет служить заполнителем для моделирования атрибутов и свойств книги во время наших тестов.

Затем мы тщательно тестируем функцию findById. Мы объявили три тестовых случая.

  1. Первый тестовый пример гарантирует, что функция правильно находит и возвращает книгу по ее идентификатору. Мы достигаем этого, имитируя функцию findById модели для разрешения с помощью нашей предопределенной макетной книги, а затем проверяя, соответствует ли результат ожиданию.
  2. Последующие тестовые примеры обрабатывают сценарии ошибок. Во втором тестовом примере мы моделируем недопустимый идентификатор и утверждаем, что вызов findById с этим идентификатором вызывает исключение BadRequestException. Мы достигаем этого, имитируя функцию isValidObjectId, чтобы она возвращала false, а затем используя ожидание для подтверждения выданной ошибки.
  3. Третий тестовый пример проверяет условие, при котором функция findById не может найти запрошенную книгу. Мы имитируем функцию findById модели, чтобы она возвращала значение null, имитируя сценарий, в котором книга не найдена. Как и ожидалось, затем мы проверяем, вызывает ли вызов findById с этим идентификатором исключение NotFoundException.

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

Тестирование функции 'updateById' BookService

В этом тестовом сценарии мы проверяем работоспособность обновления и возврата информации о книге. Тестовый сценарий включает моделирование обновления названия книги и подтверждение того, что обновленный объект книги возвращается должным образом.

Во время выполнения теста вызывается функция updateById службы с соответствующим идентификатором книги и обновленными данными книги. Фокальная реализация гарантирует, что служба взаимодействует с методом findByIdAndUpdate модели, как и предполагалось.

Тестирование функции 'deleteById' BookService

Тест гарантирует, что функция deleteById успешно удаляет книгу и возвращает ожидаемый результат. Имитируя операцию с базой данных с помощью findByIdAndDelete, мы проверяем, что функция правильно взаимодействует с моделью данных.

Запуск тестовых сценариев

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

Необходимо убедиться, что вы находитесь в корневом каталоге вашего проекта Nest.js, выполните следующие действия:

  1. Откройте терминал или командную строку.
  2. Введите следующую команду: npm run test

Эта команда инициирует выполнение ваших модульных тестов с использованием среды тестирования, которую мы установили ранее.

Запуск тестов — важный шаг в обеспечении надежности и правильности вашей кодовой базы.

Заключение

В этом руководстве мы рассмотрели основные концепции модульного тестирования в NestJS, включая настройку модулей тестирования, создание фиктивных сервисов и выполнение тестовых примеров.

Источник:

#JavaScript #NestJS #Testing
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу