Хостинг API несет ответственность за его работу. Нет лучшего или более простого способа сделать это, чем автоматическое тестирование с помощью такого инструмента, как Mocha.

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

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

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

Тестирование API-интерфейсов Node.js с использованием Mocha, Chai и Chai-HTTP

instagram viewer

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

Он также поддерживает различные стили тестирования, включая синхронное и асинхронное тестирование, что позволяет использовать широкий спектр сценариев тестирования.

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

Используя Mocha в сочетании с Chai и Chai-HTTP, вы можете эффективно тестировать API. Рабочий процесс тестирования включает в себя:

  • Выполнение HTTP-запросов к указанным конечным точкам API.
  • Определение ожидаемых ответов.
  • Проверка полученных данных из указанного источника, кодов состояния HTTP и т. д.

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

Вы можете найти код этого проекта в его Репозиторий GitHub.

Настройка проекта Express.js и базы данных MongoDB

Для начала, создать веб-сервер Expressи установите эти пакеты:

npm установить корс dotenv мангуст mongodb

Следующий, создать базу данных MongoDB или настроить кластер MongoDB в облаке. Затем скопируйте URL-адрес подключения к базе данных, создайте .env файл в корневом каталоге и вставьте в строку подключения к базе данных:

CONNECTION_STRING="строка подключения"

Чтобы завершить процесс установки, вам необходимо настроить подключение к базе данных и определить модели данных для ваших пользовательских данных. Обратитесь к коду в репозитории GitHub этого проекта, чтобы:

  • Настройте подключение к базе данных в утилиты/db.js.
  • Определите схему пользовательских данных в модели/user.model.js.

Определите функции обработчика для маршрутов API

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

В корневом каталоге создайте контроллеры/userControllers.js файл и добавьте следующий код:

константа Пользователь = требовать('../модели/user.model');

экспорт.registerUser = асинхронный (требование, разрешение) => {
константа {имя пользователя, пароль} = req.body;

пытаться {
Ждите User.create({имя пользователя, пароль});
рез.статус(201).отправлять({ сообщение: «Пользователь успешно зарегистрирован» });
} ловить (ошибка) {
консоль.лог (ошибка);
рез.статус(500).отправлять({ сообщение: 'Произошла ошибка!! ' });
}
};

экспорт.getUsers = асинхронный (требование, разрешение) => {
пытаться {
константа пользователи = Ждите Пользователь. найти ({});
res.json (пользователи);
} ловить (ошибка) {
консоль.лог (ошибка);
рез.статус(500).отправлять({ сообщение: 'Произошла ошибка!!' });
}
};

Определите маршруты API

Создать новый маршруты /userRoutes.js файл в корневом каталоге и добавьте следующий код.

константа экспресс = требовать('выражать');
константа роутер = экспресс. Маршрутизатор();
константа пользовательские контроллеры = требовать('../контроллеры/пользовательконтроллеры');

роутер.пост('/апи/регистр', userControllers.registerUser);
роутер.получить('/API/пользователи', userControllers.getUsers);
модуль.экспорт = маршрутизатор;

Определите точку входа на сервер

Обновите свой сервер.js файл со следующим кодом.

константа экспресс = требовать('выражать');
константа кор = требовать(корс);
константа приложение = экспресс();
константа порт = 5000;
требовать('дотенв').конфиг();
константа подключить БД = требовать('./утилиты/дб');

подключить БД();

app.use(express.json());
app.use (express.urlencoded({ расширенный: истинный }));
app.use(cors());

константа пользовательские маршруты = требовать('./маршруты/userRoutes');
приложение.использовать('/', пользовательские маршруты);

app.listen (порт, () => {
консоль.бревно(`Сервер прослушивает http://localhost:${порт}`);
});

модуль.экспорт = приложение;

Напишите и выполните тестовые случаи с Mocha

Имея пользовательский API, приступайте к настройке тестовой среды. Сначала установите эти пакеты как зависимости для разработчиков.

npm установить мокко чай чай-http --save-dev

Теперь добавьте следующий скрипт в файл package.json.

"скрипты": {
"тест": "мокко -- время ожидания 10000"
},

Эта команда будет выполнять тестовые наборы — добавление свойства тайм-аута с соответствующим значением позволяет контролировать максимальное время, отведенное для выполнения отдельных тестовых наборов.

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

Протестируйте конечные точки API

В корневом каталоге создайте новую папку и назовите ее тест. Внутри этой папки создайте новый user.tests.js файл и добавьте следующий код для теста конечной точки POST.

константа чай = требовать(чай);
константа чайHttp = требовать('чай-http');
константа приложение = требовать('../сервер');

chai.use (chaiHttp);
константа ожидать = чай.ожидать;

описывать(«Пользовательский API», () => {
описывать('ОТПРАВИТЬ /API/регистр', () => {
это('должен обрабатывать регистрацию пользователя', (сделано) => {
chai.request (приложение)
.почта('/апи/регистр')
.отправлять({ имя пользователя: 'тестовый пользователь', пароль: 'тестовый пароль' })
.конец((ошибка, разрешение) => {
если (ошибка) {
ожидать (res).to.have.status(500);
ожидать (res.body).to.have.property('сообщение').это.равно('Произошла ошибка!!');
} еще {
ожидать (res).to.have.status(201);
ожидать (res.body).to.have.property('сообщение').равный(«Пользователь успешно зарегистрирован»);
}

сделанный();
});
});
});
});

Этот код определяет тестовый пример с использованием Chai и Chai HTTP для проверки функции регистрации пользователей пользовательского API.

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

Вот разбивка основных компонентов тестового примера:

  • ожидать -Этот объект позволяет вам использовать методы утверждения Chai, чтобы делать утверждения об ожидаемом ответе от API.
  • описывать - Он описывает связанные тестовые примеры вместе, в данном случае тесты, связанные с Пользовательский API. Вложенный блок описания дополнительно группирует связанные тестовые примеры, в данном случае ПОСТ/апи/регистр. Это помогает организовать тестовые случаи, конкретно связанные с определенной функциональностью.
  • это — Эта функция описывает ожидаемое поведение конечной точки API.
  • конец - Эта функция отправляет запрос и предоставляет функцию обратного вызова для обработки ответа. Функция обратного вызова выполняет утверждения, используя ожидать функция для проверки ответа, полученного от API.
  • сделанный - Эта функция запускается, чтобы отметить конец тестового примера.

Наконец, добавьте код для тестового примера конечной точки GET сразу после тестового примера конечной точки POST.

описывать('ПОЛУЧИТЬ /api/пользователи', () => {
это('должен получить все пользовательские данные', (сделано) => {
chai.request (приложение)
.получать('/API/пользователи')
.конец((ошибка, разрешение) => {
если (ошибка) {
ожидать (res).to.have.status(500);
ожидать (res.body).to.have.property('сообщение').это.равно(«Произошла ошибка при получении пользовательских данных»);
} еще {
ожидать (res).to.have.status(200);
ожидать (res.body).to.be.an('множество');
}

сделанный();
});
});
});

Идите вперед и запустите тестовый скрипт на своем терминале, чтобы выполнить два тестовых примера.

нпм-тест

Если при выполнении тестовых случаев не возникло ошибок, вы должны увидеть аналогичный вывод, указывающий, что тесты прошли успешно.

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

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

Mocha не дает вам повода не тестировать свои API

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

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