playwright-ai-auto-debug
Version:
Automatic Playwright test debugging with AI assistance + UI Test Coverage Analysis
263 lines (212 loc) • 11.7 kB
Markdown
1.3.0+ полностью переработана с использованием принципов **Clean Architecture** и **Domain-Driven Design** для создания масштабируемой и тестируемой системы.
- Монолитная структура (225+ строк в одном файле)
- Смешанная ответственность модулей
- Тесная связанность компонентов
- Отсутствие абстракций
- Сложное тестирование
- Процедурный стиль программирования
- **Clean Architecture** с четким разделением слоев
- **Domain-Driven Design** с rich domain entities
- **Dependency Injection** для управления зависимостями
- **Strategy Pattern** для AI провайдеров
- **Observer Pattern** для отчетности
- **Command Pattern** для MCP действий
- Полное покрытие тестами
- Модульная расширяемая структура
```
src/
├── domain/
│ ├── entities/
│ │ ├── TestError.js
│ │ ├── AIResponse.js
│ │ └── Report.js
│ ├── repositories/
│ │ ├── IAIProvider.js
│ │ ├── IErrorRepository.js
│ │ └── IReporter.js
│ └── services/
│ └── ErrorAnalysisService.js
│
├── application/
│ ├── usecases/
│ │ └── AnalyzeTestErrorsUseCase.js
│ └── services/
│ └── TestDebugService.js
│
├── infrastructure/
│ ├── ai/
│ │ ├── MistralProvider.js
│ │ ├── OpenAIProvider.js
│ │ └── ClaudeProvider.js
│ ├── repositories/
│ │ └── FileErrorRepository.js
│ ├── reporters/
│ │ ├── HTMLReporter.js
│ │ ├── AllureReporter.js
│ │ └── MarkdownReporter.js
│ ├── mcp/
│ │ └── McpClient.js
│ ├── config/
│ │ └── ConfigLoader.js
│ └── di/
│ ├── Container.js
│ └── bindings.js
│
├── presentation/
│ └── cli/
│ └── CliApplication.js
│
└── main.js
```
```bash
node src/main.js debug
node src/main.js debug --use-mcp
node src/main.js info
node src/main.js setup
node src/main.js --help
```
```javascript
// Использование в коде
import { getContainer } from './src/infrastructure/di/Container.js';
async function analyzeMyTests() {
const container = getContainer();
const testDebugService = await container.get('testDebugService');
const results = await testDebugService.debugTests('./my-project', {
useMcp: true
});
console.log(`Обработано ${results.processedCount} ошибок`);
}
```
```bash
node example-new-architecture.js
```
- **Domain Layer**: Содержит бизнес-логику и правила
- **Application Layer**: Оркестрирует Use Cases
- **Infrastructure Layer**: Внешние зависимости и реализации
- **Presentation Layer**: UI/CLI интерфейсы
- **Rich Domain Entities**: Сущности содержат бизнес-логику
- **Value Objects**: Неизменяемые объекты значений
- **Domain Services**: Сложная доменная логика
- **Repositories**: Абстракция доступа к данным
```javascript
// Пример использования DI
const container = getContainer();
const testDebugService = await container.get('testDebugService');
const results = await testDebugService.debugTests('./project');
```
```javascript
// Легко добавить новый AI провайдер
class NewAIProvider extends IAIProvider {
async generateResponse(prompt, config, domSnapshot) {
// Реализация нового провайдера
}
}
// Регистрируем в DI контейнере
container.bind('newAiProvider', () => new NewAIProvider());
```
1. Создайте класс, реализующий `IAIProvider`:
```javascript
// src/infrastructure/ai/MyAIProvider.js
import { IAIProvider } from '../../domain/repositories/IAIProvider.js';
export class MyAIProvider extends IAIProvider {
async generateResponse(prompt, config, domSnapshot) {
// Ваша реализация
}
getProviderName() { return 'My AI'; }
getSupportedModels() { return ['my-model']; }
}
```
2. Зарегистрируйте в DI контейнере:
```javascript
// src/infrastructure/di/bindings.js
container.bind('myAiProvider', () => new MyAIProvider());
```
1. Реализуйте интерфейс `IReporter`
2. Зарегистрируйте в `ReporterManager`
3. Настройте в конфигурации
Новая архитектура обеспечивает отличную тестируемость:
```javascript
// Пример unit теста
describe('TestError', () => {
test('should detect error type correctly', () => {
const error = new TestError('test.js', 'AssertionError: expected...');
expect(error.errorType).toBe('assertion_error');
});
});
// Пример integration теста с моками
describe('AnalyzeTestErrorsUseCase', () => {
test('should analyze errors correctly', async () => {
const mockAiProvider = { generateResponse: jest.fn() };
const useCase = new AnalyzeTestErrorsUseCase(
mockErrorRepo, mockAiProvider, mockReporter
);
const result = await useCase.execute(request);
expect(result.success).toBe(true);
});
});
```
```javascript
const service = await container.get('testDebugService');
const health = await service.healthCheck();
console.log(health.status); // 'healthy' | 'unhealthy'
```
- Время анализа каждого файла
- Успешность AI запросов
- Качество рекомендаций
- Использование ресурсов
1. **Постепенная миграция**: Старая версия остается в `lib/`, новая в `src/`
2. **Совместимость**: CLI команды остаются теми же
3. **Конфигурация**: Использует ту же конфигурацию
4. **Данные**: Совместим с существующими отчетами
- 🧪 **Тестируемость**: Все компоненты легко тестируются изолированно
- 🔧 **Модульность**: Изменения в одном слое не влияют на другие
- 📖 **Читаемость**: Четкая структура и разделение ответственности
- 🚀 **Расширяемость**: Новые функции добавляются без изменения существующего кода
- ⚡ **Производительность**: Оптимизированные зависимости и ленивая загрузка
- 🛡️ **Надежность**: Строгая типизация и валидация
- 📊 **Мониторинг**: Встроенные метрики и health checks
- 🔄 **Масштабируемость**: Легко добавлять новые AI провайдеры и функции
1. Изучите архитектуру в `docs/NEW_ARCHITECTURE.md`
2. Запустите `node example-new-architecture.js` для понимания
3. Создайте feature branch
4. Добавьте тесты для новой функциональности
5. Следуйте принципам Clean Architecture
- [Clean Architecture by Robert Martin](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)
- [Domain-Driven Design](https://martinfowler.com/bliki/DomainDrivenDesign.html)
- [Dependency Injection Patterns](https://martinfowler.com/articles/injection.html)
---
**🏗️ Эта архитектура создана для долгосрочного развития и масштабирования проекта Playwright AI Auto-Debug**
**Модульная расширяемая архитектура для Playwright AI Auto-Debug**
Версия