Files
gromov 75bd97e8f9 feat: добавить ручной runtime-клиент
- добавлен корневой runtime export HttpClient и createApiClient
- настроена сборка JS и d.ts для публичного API пакета
- добавлен тест ручной сборки operations через createApiClient
- добавлена документация по ручному клиенту без OpenAPI
- версия пакета поднята до 5.1.0
2026-07-03 10:51:56 +03:00
..
2025-10-28 09:58:44 +03:00
2025-10-28 09:58:44 +03:00

Документация по тестированию API CodeGen

Обзор

Проект использует комплексную систему тестирования с максимальным покрытием:

  • Юнит тесты - тестирование отдельных модулей
  • Интеграционные тесты - тестирование взаимодействия компонентов
  • E2E тесты - полный цикл от генерации до использования

Общее количество тестов: ~72 кейса

Стек технологий

  • Bun test - встроенный test runner (быстрый, совместим с Jest API)
  • msw - Mock Service Worker для HTTP мокирования
  • tmp - создание временных директорий
  • execa - запуск CLI команд

Структура тестов

tests/
├── fixtures/           # Тестовые OpenAPI спецификации
│   ├── minimal.json   # Минимальная валидная спецификация
│   ├── valid.json     # Полная валидная спецификация
│   ├── complex.json   # Сложная (100+ endpoints)
│   ├── with-auth.json # С authentication
│   ├── invalid.json   # Невалидная спецификация
│   ├── empty.json     # Пустая спецификация
│   └── edge-cases.json # Unicode, спецсимволы
│
├── helpers/           # Вспомогательные функции
│   ├── setup.ts      # Создание/очистка temp директорий
│   ├── mock-server.ts # Mock HTTP сервер
│   └── fixtures.ts   # Утилиты для фикстур
│
├── unit/             # Юнит тесты
│   ├── cli.test.ts          # CLI команды
│   ├── generator.test.ts    # Генератор
│   ├── config.test.ts       # Валидация конфигурации
│   └── utils/
│       └── file.test.ts     # Файловые утилиты
│
└── integration/      # Интеграционные тесты
    ├── e2e-generation.test.ts    # E2E генерация
    └── generated-client.test.ts  # Сгенерированный клиент

Запуск тестов

Все тесты

bun test

Только юнит тесты

bun test:unit

Только интеграционные тесты

bun test:integration

Watch режим

bun test:watch

С coverage

bun test:coverage

Конкретный файл

bun test tests/unit/cli.test.ts

Конкретный тест

bun test -t "should generate client with custom name"

Покрываемые сценарии

1. CLI тесты (15 кейсов)

Базовые сценарии:

  • ✅ Запуск с локальным файлом
  • ✅ Запуск с URL
  • ✅ Генерация с кастомным именем
  • ✅ Автоматическое имя из OpenAPI title
  • ✅ Отображение версии --version
  • ✅ Отображение help --help

Обработка ошибок:

  • ❌ Отсутствие --input
  • ❌ Отсутствие --output
  • ❌ Несуществующий файл
  • ❌ Невалидный OpenAPI
  • ❌ Недоступный URL
  • ❌ Ошибки записи

2. Генератор (20 кейсов)

Корректная генерация:

  • ✅ Создание файла
  • ✅ Структура кода
  • ✅ Все HTTP методы (GET, POST, PUT, PATCH, DELETE)
  • ✅ Типы для request/response
  • ✅ Path/query параметры
  • ✅ Request body
  • ✅ Enum типы
  • ✅ Bearer authentication
  • ✅ Хук onFormatRouteName
  • ✅ BaseUrl из servers

Edge cases:

  • ❌ Пустая спецификация
  • ❌ Минимальная спецификация
  • ❌ Сложная спецификация (100+ endpoints)
  • ❌ Unicode символы

3. Утилиты (10 кейсов)

file.test.ts:

  • ✅ fileExists() - существующий файл
  • ✅ fileExists() - несуществующий файл
  • ✅ readJsonFile() - локальный файл
  • ✅ readJsonFile() - URL
  • ❌ readJsonFile() - невалидный JSON
  • ❌ readJsonFile() - недоступный URL
  • ✅ ensureDir() - создание директорий
  • ✅ writeFileWithDirs() - запись с созданием директорий

config.test.ts:

  • ✅ Валидная конфигурация
  • ❌ Без inputPath
  • ❌ Без outputPath
  • ✅ Опциональное поле fileName

4. Сгенерированный клиент

Компиляция:

  • ✅ TypeScript компиляция без ошибок
  • ✅ Отсутствие type errors
  • ✅ Корректные импорты/экспорты

Корректность API:

  • ✅ Все endpoints присутствуют
  • ✅ Корректные имена методов
  • ✅ HttpClient инициализация
  • ✅ Lifecycle hooks в HttpClient
  • ✅ Отсутствие устаревшего baseApiParams

5. Интеграционные E2E

Полный цикл:

  • ✅ CLI → создание → импорт → использование
  • ✅ Генерация из локального файла
  • ✅ Генерация из URL
  • ✅ Повторная генерация

HTTP с mock:

  • ✅ GET без параметров
  • ✅ POST с body
  • ✅ Обработка 404 статуса
  • ✅ Bearer authentication через onRequest
  • ✅ Сохранение явно переданного Authorization
  • ✅ Retry через onError и ApiError
  • ✅ Ошибки парсинга успешного ответа в onError
  • ✅ Timeout через AbortSignal

Дополнительная информация