Files
claude-task-master/tests/e2e/README.md
2025-07-19 00:18:16 +03:00

204 lines
5.9 KiB
Markdown

# Task Master E2E Tests
This directory contains the modern end-to-end test suite for Task Master AI. The JavaScript implementation provides parallel execution, better error handling, and improved maintainability compared to the legacy bash script.
## Features
- **Parallel Execution**: Run test groups concurrently for faster test completion
- **Modular Architecture**: Tests are organized into logical groups (setup, core, providers, advanced)
- **Comprehensive Logging**: Detailed logs with timestamps, cost tracking, and color-coded output
- **LLM Analysis**: Automatic analysis of test results using AI
- **Error Handling**: Robust error handling with categorization and recommendations
- **Flexible Configuration**: Easy to configure test settings and provider configurations
## Structure
```
tests/e2e/
├── config/
│ └── test-config.js # Test configuration and settings
├── utils/
│ ├── logger.js # Test logging utilities
│ ├── test-helpers.js # Common test helper functions
│ ├── llm-analyzer.js # LLM-based log analysis
│ └── error-handler.js # Error handling and reporting
├── tests/
│ ├── setup.test.js # Setup and initialization tests
│ ├── core.test.js # Core task management tests
│ ├── providers.test.js # Multi-provider tests
│ └── advanced.test.js # Advanced feature tests
├── runners/
│ ├── parallel-runner.js # Parallel test execution
│ └── test-worker.js # Worker thread for parallel execution
├── run-e2e-tests.js # Main test runner
├── run_e2e.sh # Legacy bash implementation
└── e2e_helpers.sh # Legacy bash helpers
```
## Usage
### Run All Tests (Recommended)
```bash
# Runs all test groups in the correct order
npm run test:e2e
```
### Run Tests Sequentially
```bash
# Runs all test groups sequentially instead of in parallel
npm run test:e2e:sequential
```
### Run Individual Test Groups
Each test command automatically handles setup if needed, creating a fresh test directory:
```bash
# Each command creates its own test environment automatically
npm run test:e2e:setup # Setup only (initialize, parse PRD, analyze complexity)
npm run test:e2e:core # Auto-runs setup + core tests (task CRUD, dependencies, status)
npm run test:e2e:providers # Auto-runs setup + provider tests (multi-provider testing)
npm run test:e2e:advanced # Auto-runs setup + advanced tests (tags, subtasks, expand)
```
**Note**: Each command creates a fresh test directory, so running individual tests will not share state. This ensures test isolation but means each run will parse the PRD and set up from scratch.
### Run Multiple Groups
```bash
# Specify multiple groups to run together
node tests/e2e/run-e2e-tests.js --groups core,providers
# This automatically runs setup first if needed
node tests/e2e/run-e2e-tests.js --groups providers,advanced
```
### Run Tests Against Existing Directory
If you want to reuse a test directory from a previous run:
```bash
# First, find your test directory from a previous run:
ls tests/e2e/_runs/
# Then run specific tests against that directory:
node tests/e2e/run-e2e-tests.js --groups core --test-dir tests/e2e/_runs/run_2025-07-03_094800611
```
### Analyze Existing Log
```bash
npm run test:e2e:analyze
# Or analyze specific log file
node tests/e2e/run-e2e-tests.js --analyze-log path/to/log.log
```
### Skip Verification Tests
```bash
node tests/e2e/run-e2e-tests.js --skip-verification
```
### Run Legacy Bash Tests
```bash
npm run test:e2e:bash
```
## Test Groups
### Setup (`setup`)
- NPM global linking
- Project initialization
- PRD parsing
- Complexity analysis
### Core (`core`)
- Task CRUD operations
- Dependency management
- Status management
- Subtask operations
### Providers (`providers`)
- Multi-provider add-task testing
- Provider comparison
- Model switching
- Error handling per provider
### Advanced (`advanced`)
- Tag management
- Model configuration
- Task expansion
- File generation
## Configuration
Edit `config/test-config.js` to customize:
- Test paths and directories
- Provider configurations
- Test prompts
- Parallel execution settings
- LLM analysis settings
## Output
- **Log Files**: Saved to `tests/e2e/log/` with timestamp
- **Test Artifacts**: Created in `tests/e2e/_runs/run_TIMESTAMP/`
- **Console Output**: Color-coded with progress indicators
- **Cost Tracking**: Automatic tracking of AI API costs
## Requirements
- Node.js >= 18.0.0
- Dependencies: chalk, boxen, dotenv, node-fetch
- System utilities: jq, bc
- Valid API keys in `.env` file
## Comparison with Bash Tests
| Feature | Bash Script | JavaScript |
|---------|------------|------------|
| Parallel Execution | ❌ | ✅ |
| Error Categorization | Basic | Advanced |
| Test Isolation | Limited | Full |
| Performance | Slower | Faster |
| Debugging | Harder | Easier |
| Cross-platform | Limited | Better |
## Troubleshooting
1. **Missing Dependencies**: Install system utilities with `brew install jq bc` (macOS) or `apt-get install jq bc` (Linux)
2. **API Errors**: Check `.env` file for valid API keys
3. **Permission Errors**: Ensure proper file permissions
4. **Timeout Issues**: Adjust timeout in config file
## Development
To add new tests:
1. Create a new test file in `tests/` directory
2. Export a default async function that accepts (logger, helpers, context)
3. Return a results object with status and errors
4. Add the test to appropriate group in `test-config.js`
Example test structure:
```javascript
export default async function myTest(logger, helpers, context) {
const results = {
status: 'passed',
errors: []
};
try {
logger.step('Running my test');
// Test implementation
logger.success('Test passed');
} catch (error) {
results.status = 'failed';
results.errors.push(error.message);
}
return results;
}
```