Error Scenario Testing
Overview
Test error handling by forcing error conditions. Don't commit error handling code without testing error paths.
Forcing Error Conditions
Methods:
- •Add test mode flags to enable error injection
- •Create test seam commands to trigger errors
- •Temporarily modify code to force failures (revert after testing)
- •Use environment variables to enable error testing
See references/error-injection.md for detailed error injection patterns.
Maze Generation Error Testing
For maze generation failures:
- •Add
forceMazeFailure()test seam command - •Modify maze generation to fail after N attempts
- •Test fallback maze creation
- •Verify console warnings appear
See references/maze-generation-errors.md for specific patterns.
Error Testing Checklist
- • Error condition can be triggered
- • Error handling code executes
- • Fallback behavior works correctly
- • User experience is acceptable
- • Console warnings/logs appear
- • Game doesn't crash
Test Mode Pattern
See references/error-injection.md for test mode implementation pattern.
Test Seam Error Injection
Add test seam commands to trigger errors:
// Force error conditions via test seam
window.__TEST__.commands.forceMazeFailure = () => {
// Force maze generation to fail
this.mazeGenerator.forceFailure = true;
};
window.__TEST__.commands.restoreMazeGeneration = () => {
// Restore normal maze generation
this.mazeGenerator.forceFailure = false;
};
Error scenario test commands:
window.__TEST__.commands = {
forceMazeFailure: () => {
this.mazeGenerator.forceFailure = true;
},
restoreMazeGeneration: () => {
this.mazeGenerator.forceFailure = false;
},
triggerAssetLoadError: () => {
// Simulate asset load failure
this.assetLoader.simulateError = true;
},
restoreAssetLoading: () => {
this.assetLoader.simulateError = false;
}
};
Test error handling paths:
# Test error scenario agent-browser eval "window.__TEST__.commands.forceMazeFailure()" agent-browser eval "window.__TEST__.commands.generateMaze()" # Verify fallback behavior agent-browser eval "window.__TEST__.commands.restoreMazeGeneration()"
Error Recovery Patterns
Retry logic with configurable attempts:
async function generateWithRetry(
generator: () => Promise<Result>,
maxAttempts: number = 3
): Promise<Result> {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
return await generator();
} catch (error) {
console.warn(`Attempt ${attempt} failed:`, error);
if (attempt === maxAttempts) {
throw new Error(`Failed after ${maxAttempts} attempts`);
}
// Wait before retry
await sleep(1000 * attempt); // Exponential backoff
}
}
throw new Error('Max attempts reached');
}
Fallback mechanisms for critical operations:
async function loadAssetWithFallback(
assetKey: string,
primaryUrl: string,
fallbackUrl: string
): Promise<void> {
try {
this.load.image(assetKey, primaryUrl);
} catch (error) {
console.warn(`Failed to load ${assetKey} from primary URL, using fallback`);
this.load.image(assetKey, fallbackUrl);
}
}
Console warning patterns:
if (!this.textures.exists('asset-key')) {
console.warn('Asset not found:', 'asset-key');
console.warn('Using fallback placeholder');
// Use fallback
}
Graceful degradation strategies:
create() {
try {
// Try primary implementation
this.initPrimaryFeature();
} catch (error) {
console.warn('Primary feature failed, using fallback:', error);
// Graceful degradation
this.initFallbackFeature();
}
}
Verification Checklists
Verify error handling works:
## Error Handling Verification - [ ] Error condition can be triggered - [ ] Error handling code executes - [ ] Fallback behavior works correctly - [ ] User experience is acceptable - [ ] Console warnings/logs appear - [ ] Game doesn't crash
Test fallback mechanisms:
# Test fallback by forcing error agent-browser eval "window.__TEST__.commands.forceMazeFailure()" agent-browser eval "window.__TEST__.commands.generateMaze()" # Verify fallback maze is created agent-browser eval "window.__TEST__.gameState().maze"
Check console warnings:
# Check for console warnings agent-browser console | grep -i "warn\|error" # Verify warnings appear for error scenarios agent-browser eval "window.__TEST__.commands.forceMazeFailure()" agent-browser console
Validate recovery behavior:
# Test recovery after error agent-browser eval "window.__TEST__.commands.forceMazeFailure()" agent-browser eval "window.__TEST__.commands.generateMaze()" agent-browser eval "window.__TEST__.commands.restoreMazeGeneration()" agent-browser eval "window.__TEST__.commands.generateMaze()" # Verify normal generation works after recovery
Resources
- •
references/error-injection.md- Test mode flags, test seam commands, environment variables - •
references/maze-generation-errors.md- Specific patterns for maze generation failures