--- title: Проверить SDK локально description: Тестируйте публичный метод, точный запрос и типизированный результат без внешней сети. sources: - eazy_sdk.preparation - eazy_sdk.testing api_fingerprint: "sha256:b114bef1c5d6d35e5eb9bba73c688f0e74316cc5d2b55cebca5c4c0a9356b222" --- Что именно доказал тест? Хороший тест вызывает тот же публичный метод, который использует приложение. Локальный handler принимает подготовленный запрос и возвращает детерминированный ответ, поэтому проверка не зависит от внешнего сервиса. ```{literalinclude} ../../../../../examples/docs/testing.py :language: python :start-after: "# region docs: testing" :end-before: "# endregion docs: testing" ``` Пример доказывает две стороны контракта: сервер наблюдает нужный method и path, а вызывающий получает модель `Message`. Реальный тест сравнивает эти значения средствами выбранного test runner; транспортная обвязка остаётся общей fixture. :::{dropdown} Файл целиком ```{literalinclude} ../../../../../examples/docs/testing.py :language: python ``` ::: ```text message: 42 План на пятницу observed: GET api.mail.example/messages/42 ``` ## Выбрать уровень проверки | Уровень | Что подтверждает | |---|---| | Импорт деклараций | Контракты компилируются и типы согласованы | | `prepare(...)` | Точные method, URL, headers и body без отправки | | Локальный handler | Полный request/response pipeline и ошибки | | Локальный сайт | Несколько связанных вызовов, cookies, refresh и replay | | Реальный браузер | DOM, навигация, handlers и состояние контекста | Для подписанных или зашифрованных запросов проверяйте окончательные байты через recording handler, а открытые данные на стороне локального сайта. Не подменяйте compiler или executor: иначе тест подтверждает отдельную тестовую ветку, которой нет у пользователя SDK. :::{note} Публичная сеть подходит для отдельного opt-in smoke test. Основной набор должен работать детерминированно и не зависеть от чужих credentials, rate limits или доступности сервиса. ::: ## Дальше - {doc}`Подготовить запрос без отправки ` - {doc}`Собрать общий локальный сайт ` - {doc}`Проверить варианты ответа `