e2e интеграционные тесты

This commit is contained in:
2025-10-28 11:09:37 +03:00
parent 4e2d0f03de
commit 3c3ac80713
2 changed files with 0 additions and 535 deletions

View File

@@ -172,148 +172,6 @@ bun test -t "should generate client with custom name"
- ✅ Bearer authentication
- ✅ Custom headers
## Написание новых тестов
### Пример юнит теста
```typescript
import { describe, test, expect, beforeEach, afterEach } from 'bun:test';
import { setupTest } from '../helpers/setup.js';
describe('My Feature', () => {
let tempDir: string;
let cleanup: () => Promise<void>;
beforeEach(async () => {
const setup = await setupTest();
tempDir = setup.tempDir;
cleanup = setup.cleanup;
});
afterEach(async () => {
await cleanup();
});
test('should do something', () => {
// Arrange
const input = 'test';
// Act
const result = myFunction(input);
// Assert
expect(result).toBe('expected');
});
});
```
### Пример интеграционного теста
```typescript
import { describe, test, expect, beforeAll, afterAll } from 'bun:test';
import { createMockServer } from '../helpers/mock-server.js';
describe('Integration Test', () => {
let mockServer;
beforeAll(() => {
mockServer = createMockServer();
mockServer.start();
});
afterAll(() => {
mockServer.stop();
});
test('should make HTTP request', async () => {
const response = await fetch('https://api.example.com/users');
const data = await response.json();
expect(response.status).toBe(200);
expect(Array.isArray(data)).toBe(true);
});
});
```
## Лучшие практики
### 1. Изоляция тестов
- Каждый тест должен быть независимым
- Использовать `beforeEach`/`afterEach` для setup/cleanup
- Не полагаться на порядок выполнения
### 2. Именование
- Описательные названия: `"должен создать файл при корректных параметрах"`
- Группировать с помощью `describe`
- Использовать принцип AAA (Arrange, Act, Assert)
### 3. Очистка ресурсов
- Всегда очищать временные файлы
- Закрывать соединения
- Использовать `afterEach` для гарантии очистки
### 4. Async/Await
- Всегда использовать `async/await` для асинхронных операций
- Не забывать `await` перед промисами
- Устанавливать таймауты для долгих операций
### 5. Mock данные
- Использовать фикстуры для тестовых данных
- Не хардкодить данные в тестах
- Переиспользовать тестовые данные
## Troubleshooting
### Тесты падают с timeout
Увеличьте таймаут для конкретного теста:
```typescript
test('long running test', async () => {
// test code
}, 60000); // 60 секунд
```
### Тесты не очищаются
Проверьте что `cleanup()` вызывается в `afterEach`:
```typescript
afterEach(async () => {
await cleanup();
});
```
### Mock сервер не работает
Убедитесь что:
1. Сервер запущен в `beforeAll`
2. Сервер остановлен в `afterAll`
3. Хендлеры правильно настроены
### Файлы не находятся
Используйте абсолютные пути или пути относительно `__dirname`:
```typescript
const fixturePath = join(__dirname, '../fixtures/test.json');
```
## CI/CD
Тесты автоматически запускаются при:
- Push в любую ветку
- Создании Pull Request
- Перед деплоем
Требования для прохождения CI:
-Все тесты должны пройти
- ✅ Coverage > 80%
- ✅ Нет TypeScript ошибок
- ✅ Нет lint ошибок
## Метрики
### Целевые показатели
- **Coverage:** > 90%
- **Скорость:** < 30 сек для всех тестов
- **Стабильность:** 0 flaky тестов
### Текущие показатели
Запустите `bun test:coverage` для просмотра актуальных метрик.
## Дополнительная информация