Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Node.js
Code

Тестирование API Node.js

by
Difficulty:BeginnerLength:MediumLanguages:

Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)

Введение

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

В предыдущем уроке вы узнали, как создать API с помощью Node.js. Если вы не прошли через это руководство, я предлагаю вам сделать это, прежде чем продолжить с этим. В этом уроке вы будете писать тесты для API, построенного с использованием Node.js и Express. В конце этого руководства вы узнаете, как работает тестирование в Node.js, и вы сможете создавать функциональные и проверенные API.

Инструменты тестирования

Вы будете использовать Mocha, Expect и Supertest.

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

Expect - это библиотека утверждений, которая помогает вам делать более достоверные утверждения. Вы увидите, как это работает. Supertest обеспечивает абстракцию высокого уровня для тестирования HTTP. Это необходимо, так как вы будете тестировать API.

Хватит разговоров, пора писать код.

Настройка проекта

У меня есть проект списка дел, который уже настроен для вас. Модель, файл конфигурации и часть app.js уже выполнены. Перейдите к GitHub и клонируйте себе репозиторий. Или вы можете просто сделать:

Ваш package.json должен выглядеть так.

Теперь запустите команду для установки зависимостей.

Тестирование POST запроса

Для вашего теста создайте новую папку под названием test; эта папка должна находиться в вашем каталоге server. Теперь создайте новый файл, в котором вы напишете свой тест. Назовите файл server.test.js.

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

Вам нужно иметь несколько заданий todo, которые будут использоваться во время тестов. Но эти to-dos будут удаляться из тестовой базы данных каждый раз, когда вы запускаете тестовый пакет. Чтобы решить эту проблему, создайте два теста, например.

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

Сделав это, вы можете написать тест для запроса POST. Для вашего запроса POST вы напишете два теста. Первый сделает запрос с валидным to-do и будет успешным. Второй будет делать запрос с недопустимым телом, и он не должно создавать новых дел.

Вот как должен выглядеть тест.

Запустите тест, используя команду:

Это должно потерпеть неудачу. Вот что происходит:

  1. Описываем тест.
  2. Создаем новую задачу и сохраняем ее как значение для текста.
  3. Вы отправляете запрос POST на путь /todos вашего API, отправляя то, что вы создали как тело запроса. Вы ожидаете, что код состояния для запроса будет равен 200, а тело todo - равным значению text.
  4. При возникновении ошибки возвращается ошибка, и это приведет к завершению запроса. Таким образом, следующий блок кода не будет работать. Если ошибка не встречается, поток продолжается.
  5. В базу данных поступает запрос на поиск созданного задания. Вы ожидаете, что кол-во todo в базе данных будет равно 1, а текст задания должен быть равен значению текста.
  6. Это тест, выполненный с недопустимыми данными тела.
  7. Запрос POST выполняется по пути /todos. На этот раз вы отправляете запрос без тела. Вы ожидаете получить 400 запросов. Не нужно проверять тело, поскольку вы его не отправляете. Если ошибка встречается, она возвращается и код перестает работать.
  8. Если ошибка не встречается, в базу данных делается запрос на проверку длины объекта to-dos. Мы ожидаем, что база данных будет содержать только 2, которые являются to-dos, созданными в начале.

Чтобы пройти этот тест, перейдите в файл server.js и введите код, необходимый для запроса POST.

Тест GET запроса

Это просто - тест должен вернуть кол-во todo, доступных в базе данных. Как вы уже знаете, кол-во todos должно быть 2. Почему? Вы угадали. В начале набора тестов вы создали блок beforeEach, который очищает вашу базу данных и вставляет новые данные в каждый сеанс тестирования.

Чтобы проверить, что запрос на получение всех операций «to-dos», вот код для этого.

В приведенном выше примере вы делаете запрос GET на путь /todos. На этот раз вы не передаете ничего как тело запроса, потому что это запрос GET. Вы ожидаете получить ответ с кодом состояния 200. Затем вы ожидаете, что кол-во to-dos будет равно 2.

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

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

Когда запрос GET выполняется на путь /todos, вы хотите найти все дела в коллекции Todo и вернуть их как to-dos. Добавление этого в server.js заставляет тест выполниться успешно.

Затем вы напишете три теста для запроса GET, сделанного для извлечения индивидуальных данных. Первый должен извлекать и возвращать todo. Второй и третий должны возвращать ошибку 404 в случаях, когда todo не найден.

Откройте файл server.test.js и создайте новый блок описания с первым тестовым примером.

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

Следующий тест выглядит следующим образом.

Здесь вы ищете todo с использованием ID, который не соответствует идентификатору любого todo, сохраненного в вашей базе данных. Тест ожидает, что этот запрос вернет ошибку 404.

Последний тест похож на первый, но немного другой; вот как он выглядит.

Здесь вы создаете недопустимый объект ObjectId и пытаетесь запросить базу данных, чтобы получить соответствующий результат, созданный ObjectId. Тест ожидает, что запрос вернет ошибку 404.

Когда вы запускаете тест, все они потерпят неудачу. Чтобы они выполнились, добавьте код ниже в файл server.js.

  1. Получите ID запрашиваемого todo из параметров.
  2. Проверьте, действителен ли идентификатор. Если идентификатор недействителен, отправляется сообщение об ошибке.
  3. Если идентификатор действителен, попробуйте найти то, что соответствует этому идентификатору, с помощью метода findById. Если для этого идентификатора не обнаружено ничего, отправляется ошибка 404.
  4. Если поиск выполнен, то отправляется сообщение. Затем вы ловите любую ошибку, которая возникает и отправляет ее.

Запустите тесты еще раз, и они должны пройти.

Тестирование DELETE запроса

Тест для вашего DELETE запроса будет немного похож на то, что у вас есть для GET запроса.

Во-первых, вы хотите проверить, что todo удаляется.

Вот что происходит выше:

  1. Вы устанавливаете id todo переменной с именем hexId. Затем выполняется DELETE запрос, используя идентификатор. Вы ожидаете получить ответ 200, а полученный результат соответствует значению hexId.
  2. Если встречается какая-либо ошибка, она возвращается.
  3. Если ошибка отсутствует, тест идет дальше, чтобы запросить вашу базу данных, используя идентификатор, сохраненный как значение hexId. Так как запрос DELETE был ранее отправлен, в тесте предполагается, что соответствие этого идентификатора не выполняется.

Затем вы хотите проверить, что, когда делается запрос на удаление несуществующего todo, то ответ содержит ошибку 404. Важно иметь это в виду, так как невозможно удалить один и тот же объект дважды. Вот как должен выглядеть тест на это.

Это создает идентификатор для задания, которого нет в базе данных. Затем для удаления задания выполняется запрос DELETE. Ожидается, что тест вернет ошибку 404, поскольку todo не существуют.

Вы хотите проверить, что DELETE с использованием недопустимого идентификатора возвращает ошибку 404.

Чтобы пройти тест, откройте server.js и оставьте это.

Выполните команду для проверки:

И ваши тесты должны проходить.

Заключение

На данный момент вы знаете, как настроить тестовый набор при создании API с помощью Node.js. Вы использовали Mocha, Expect и Supertest для тестирования API. Одно из преимуществ этого заключается в том, что вам не нужно всегда запускать Postman при создании вашего API. С вашими тестами вы можете узнать, что что-то сломано.

Прежде чем мы завершим, обратите внимание, что JavaScript стал одним из де-факто языков работы в Интернете. Он конечно же не лишен кривых обучения, и есть множество фреймворков и библиотек, которые тоже будут вам заняты. Если вы ищете дополнительные ресурсы для изучения или использования в своей работе, посмотрите, что у нас есть на Envato Market.

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

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.