Как проверить звонок в REST сервис

Я настроил сервер, который предоставляет несколько конечных точек клиентам, и у меня есть клиент, который использует node-rest-client пакет для post данные в бэкэнд.

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

Я думал о настройке фиктивного сервера для тестирования, но это не так.

Как я могу получить такие тесты?

Пожалуйста, дайте мне знать, если есть какие-либо недостающие данные.

Заранее спасибо!

РЕДАКТИРОВАТЬ

Я смотрел на supertest пакет, но похоже, что он используется для тестирования самой службы API REST, а не для проверки вызовов REST от клиента

1 ответ

Решение

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

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

Лучший подход зависит от технологии, которую вы используете. Например, AngularJS предоставляет способ HTTP-вызовов модульного тестирования, который называется $ httpBackend. По сути, это фиктивный HTTP-сервер, но на самом деле он не переходит через HTTP (все запросы остаются в памяти). Это возможно, потому что Angular Team рассматривает тестируемость как приоритет и разрабатывает ее таким образом с нуля.

Я не думаю, что node-rest-client предоставляет подобный тип фиктивного HTTP-сервера, поэтому может оказаться трудным провести модульное тестирование вашего клиента. Наилучший подход, вероятно, заключается в том, чтобы обернуть все случаи использования node-rest-client в отдельный объект javascript, который сам по себе не имеет модульных тестов, но его легко смоделировать в модульных тестах для других частей кода на стороне клиента. Этот объект, не прошедший модульное тестирование, может быть затем протестирован на фиктивном HTTP-сервере как часть отдельного набора тестов, или вы даже можете положиться на свои Интеграционные тесты, чтобы обнаружить любые проблемы с этой частью.

Тем не менее, как всегда, лучше свести к минимуму зависимость от интеграционных тестов (которые подключаются к реальному экземпляру серверной части), поскольку они медленные и ненадежные. Эти тесты должны проводиться только для проверки деталей верхнего уровня, таких как производительность, детали подключения, совместимость конфигурации и т. Д.

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

Обратите внимание, что упаковка всех HTTP-вызовов в объект службы javascript, вероятно, является хорошей практикой, независимо от вашей стратегии тестирования, поскольку она ограничит все случаи использования node-rest-client одним местом в вашем коде.

Другие вопросы по тегам