Перейти к содержимому

14. Тестирование

Тестирование tRPC-процедур не требует поднятия HTTP-сервера. Вы можете вызывать процедуры напрямую через createCaller(), передавая mock-контекст. Это делает unit-тесты быстрыми и изолированными.

Метод appRouter.createCaller(ctx) создаёт объект, через который можно вызывать процедуры как обычные async-функции. Это идеально для unit-тестов: нет HTTP, нет сети, только чистая бизнес-логика.

При тестировании передайте mock-контекст в createCaller. Для публичных процедур — пустой объект {}. Для защищённых процедур — объект с mock-пользователем: { user: { id: '1', role: 'admin' } }.

Для проверки, что невалидные данные корректно отклоняются, оберните вызов в try-catch и проверьте, что выброшена ошибка TRPCError с кодом BAD_REQUEST.

Вызовите защищённую процедуру с пустым контекстом (без пользователя) и убедитесь, что получите TRPCError с кодом UNAUTHORIZED.

Для интеграционных тестов используйте createHTTPServerlessHandler или поднимайте реальный сервер через createHTTPServer. Это позволяет тестировать полный цикл запроса, включая middleware и serialization.