e2e интеграционные тесты
This commit is contained in:
142
tests/README.md
142
tests/README.md
@@ -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` для просмотра актуальных метрик.
|
||||
|
||||
## Дополнительная информация
|
||||
|
||||
|
||||
Reference in New Issue
Block a user