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

Jest – это известная среда тестирования JavaScript для выполнения интеграционных тестов веб-приложений.

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

Вот и приступим,

Тестирование API (Application Programming Interface) – это тип тестирования программного обеспечения, который включает тестирование API напрямую и как часть интеграционного тестирования, чтобы определить, соответствуют ли они ожиданиям в отношении функциональности, надежности, производительности и безопасности. Тестирование API можно проводить на трех уровнях: модульном, функциональном и сквозном. Его можно использовать для проверки функциональности одного API, производительности группы API или сквозной функциональности приложения с несколькими API. Его можно использовать в широком спектре проектов по разработке программного обеспечения, включая мобильные приложения, веб-приложения и микросервисы.

Что такое интеграционное тестирование? будет обсуждаться в следующем разделе.

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

Предварительные условия будут рассмотрены в следующем разделе.

  • На вашем компьютере установлены Node.js и npm (или yarn).
  • API или приложение Node.js, которое вы хотите протестировать.
  • Jest и пакет jest-cli устанавливаются в вашем проекте как зависимость от разработчиков. Вы можете сделать это, запустив npm install --save-dev jest jest-cli
  • Понимание JavaScript.
  • Понимание API, который вы тестируете, и его конечных точек.

В этом разделе вы узнаете, как писать интеграционные тесты, а также некоторые интересные функции, которые Jest предоставляет для упрощения тестирования.

Прежде чем мы начнем писать тесты, учтите следующее:

Создайте конечные точки для вышеупомянутой логики, протестируйте конечные точки API с помощью Postman, а затем вернитесь, чтобы продолжить написание тестовой части.

Чтобы начать использовать Jest для интеграционного тестирования в Node.js API, вы должны сначала установить пакет Jest. Это можно сделать, введя следующую команду:
npm install --save-dev jest

После установки пакета нам нужно настроить наши тесты для использования Jest. В вашем package.json замените следующий раздел:

"scripts": { "test": "echo \"Error: no test specified\" && exit 1" },

С:

Нам также потребуется еще один файл конфигурации; создайте файл в корне проекта с именем jest.config.js и добавьте следующий код:

Supertest — еще один важный модуль, который работает рука об руку с Jest. Это значительно упростит тестирование наших конечных точек. В итоге устанавливаем его следующим образом:

npm install --save-dev supertest

Создайте папку в корневом каталоге и назовите ее __test__. Внутри этой папки создайте файл и назовите его testDBSetup.js.

Мы создаем базу данных, но мы будем использовать mongoose-mock для имитации Mongoose и тестирования вашего API с реальными запросами, не касаясь реальной базы данных.

Установите Mongoose и пакет mongoose-mock, выполнив следующую команду:

npm install mongoose mongoose-mock

Внутри testDBSetup.js вставьте следующий код:

const mockgoose = require('mockgoose'); mockgoose(mongoose);

В файле конфигурации Jest настройте свойство setupFilesAfterEnv, чтобы включить файл мангуста:

"setupFilesAfterEnv": ["./__test__/testDBSetup.js"]

Теперь вы можете использовать Mongoose в своих тестах как обычно, и все операции с базой данных будут имитироваться. Вы можете, например, создать новую модель Post:

Затем вы можете использовать свою тестовую базу данных для создания, чтения, обновления и удаления записей без необходимости подключения к реальному кластеру MongoDB. При написании тестов с помощью Jest вы должны быть знакомы со следующими терминами и понятиями:

Наборы тестов. Набор сгруппированных наборов тестов. В Jest набор тестов создается с помощью файла describe() function.

Тестовые наборы. Отдельный тест, который проверяет определенное поведение вашего кода. В Jest тестовый пример создается с помощью файла test() function.

Утверждения: утверждения, которые проверяют, соответствует ли результат тестового примера ожидаемому результату. Jest предоставляет несколько встроенных функций утверждения, таких как expect(), toBe() и toEqual().

Моки. Способ замены определенной функции или модуля тестовой реализацией. Это позволяет вам проверить, как ваш код ведет себя в определенных условиях или сценариях. В Jest макеты создаются с помощью функции jest.fn().

Настройка и разборка: возможность запуска определенного кода до и после каждого тестового примера. В Jest вы можете использовать функции beforeEach() и afterEach() для настройки и отключения вашей тестовой среды.

Асинхронные тесты. Тесты, включающие код, который выполняется асинхронно, например обещания или обратные вызовы. В Jest вы можете использовать ключевое слово async и обратный вызов done для обработки асинхронных тестов.

Поняв эти термины и концепции, вы теперь сможете писать эффективные тесты.

1. Создайте конечную точку публикации

Создайте файл с именем addPost.test.js в папке __test__. вставьте сюда следующий код:

В предыдущем тестовом примере мы отправляем запрос POST в конечную точку создания публикации с примерами данных публикации. Затем утверждается, что ответ совпадает с отправленными данными. Вот как на практике работает конечная точка API. Мы также видим, что код состояния — 201, что указывает на успех.

2. Получите все конечные точки публикации

Создайте файл с именем getPosts.test.js в папке __ test__. вставьте сюда следующий код:

it('should return all posts', async () => { const res = await request(app).get('/posts'); expect(res.status).toBe(200); expect(res.body).toBeInstanceOf(Array); });

Запрос GET, который ожидает возврата всех тестовых сообщений базы данных.

3. Получите одну конечную точку публикации

Создайте файл с именем getPost.test.js в папке __ test__. вставьте сюда следующий код:

В этом случае мы делаем запрос GET с определенным идентификатором сообщения, а затем проверяем, что ответ содержит правильные данные.

Создайте файл с именем updatePost.test.js в папке __ test__. вставьте сюда следующий код:

В этом тестовом примере мы отправляем запрос PUT для обновления сведений о конкретном сообщении. Затем мы ожидаем, что ответ будет включать обновленные данные поста.

5. Удалить конечную точку публикации

Создайте файл с именем deletePost.test.js в папке __ test__. вставьте сюда следующий код:

Проверка конечной точки удаления также проста; все, что нам нужно сделать, это отправить запрос DELETE на конечную точку удаления и убедиться, что мы получаем правильный ответ.

Вот и все. Мы смогли написать тесты для всех конечных точек. Если вы уже настроили приложение, npm run test проверьте, работает ли оно.

Вот результат после запуска:

Лучший способ протестировать REST API — использовать комбинацию ручного и автоматического тестирования.

Ручное тестирование включает в себя отправку запросов к API и ручную проверку ответов с помощью таких инструментов, как Postman или curl. Это полезно для быстрого тестирования основных функций API и изучения его возможностей.

Автоматизированное тестирование включает в себя создание скриптов или программ, которые отправляют запросы к API и проверяют ответы. Это полезно для регрессионного тестирования, чтобы гарантировать, что новые изменения API не нарушат существующую функциональность.

При тестировании REST API помните о следующих моментах:

1. Протестируйте хотя бы самые важные конечные точки API

2. Протестируйте API с различными входными данными, чтобы убедиться, что он может обрабатывать различные сценарии.

3. Убедитесь, что обработка ошибок API возвращает осмысленные сообщения об ошибках и коды состояния HTTP.

4. Оцените производительность и масштабируемость API, чтобы убедиться, что он может обрабатывать большой объем запросов.

Также неплохо использовать фреймворк для тестирования, такой как Jest.

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

В этой статье были затронуты следующие темы:

1. Что такое интеграционное тестирование?

2. Как установить и настроить Jest для интеграционного тестирования

3. Написание и запуск интеграционных тестов с помощью Jest

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

Первоначально опубликовано на https://scanairobi.hashnode.dev.