6.0 KiB
6.0 KiB
Документация по тестированию 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. Сгенерированный клиент (7 кейсов)
Компиляция:
- ✅ TypeScript компиляция без ошибок
- ✅ Отсутствие type errors
- ✅ Корректные импорты/экспорты
Корректность API:
- ✅ Все endpoints присутствуют
- ✅ Корректные имена методов
- ✅ HttpClient инициализация
- ✅ Метод
setSecurityData
5. Интеграционные E2E (15 кейсов)
Полный цикл:
- ✅ CLI → создание → импорт → использование
- ✅ Генерация из локального файла
- ✅ Генерация из URL
- ✅ Повторная генерация
HTTP с mock:
- ✅ GET без параметров
- ✅ GET с query параметрами
- ✅ POST с body
- ✅ PUT/PATCH/DELETE
- ✅ Статусы 200, 201, 400, 401, 404, 500
- ❌ Network errors
- ✅ Bearer authentication
- ✅ Custom headers