14. Тестирование
Тестирование tRPC-процедур не требует поднятия HTTP-сервера. Вы можете вызывать процедуры напрямую через createCaller(), передавая mock-контекст. Это делает unit-тесты быстрыми и изолированными.
Прямой вызов процедур
Заголовок раздела «Прямой вызов процедур»Метод appRouter.createCaller(ctx) создаёт объект, через который можно вызывать процедуры как обычные async-функции. Это идеально для unit-тестов: нет HTTP, нет сети, только чистая бизнес-логика.
Mock-контекст
Заголовок раздела «Mock-контекст»При тестировании передайте mock-контекст в createCaller. Для публичных процедур — пустой объект {}. Для защищённых процедур — объект с mock-пользователем: { user: { id: '1', role: 'admin' } }.
Тестирование валидации
Заголовок раздела «Тестирование валидации»Для проверки, что невалидные данные корректно отклоняются, оберните вызов в try-catch и проверьте, что выброшена ошибка TRPCError с кодом BAD_REQUEST.
Тестирование ошибок авторизации
Заголовок раздела «Тестирование ошибок авторизации»Вызовите защищённую процедуру с пустым контекстом (без пользователя) и убедитесь, что получите TRPCError с кодом UNAUTHORIZED.
Интеграционные тесты
Заголовок раздела «Интеграционные тесты»Для интеграционных тестов используйте createHTTPServerlessHandler или поднимайте реальный сервер через createHTTPServer. Это позволяет тестировать полный цикл запроса, включая middleware и serialization.