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