Test and Fix Workflow
Systematic workflow for running tests and fixing failures. This is the implementation of the mandatory code quality workflow.
When to Apply
Use this workflow when:
- •Running the mandatory test workflow
- •Fixing code quality issues
- •Debugging test failures
- •Resolving TypeScript, formatting, or linting errors
Quick Reference
Workflow Steps
- •Format code:
cd embedded-components; yarn format - •Run test suite:
cd embedded-components; yarn test - •Analyze failures by type (TypeScript, formatting, linting, tests)
- •Prioritize fixes (TypeScript → Formatting → Linting → Tests)
- •Fix issues systematically
- •Verify all fixes by re-running tests
- •Iterate until green
1. Format Code
Auto-fix formatting issues first:
cd embedded-components yarn format
This automatically fixes:
- •Indentation
- •Quote style
- •Line breaks
- •Trailing commas
- •etc.
2. Run Test Suite
Execute all tests in the project:
cd embedded-components yarn test
This runs:
- •Type checking (TypeScript)
- •Format checking (Prettier)
- •Linting (ESLint)
- •Unit tests (Vitest)
3. Analyze Failures
Categorize failures by type:
TypeScript Errors:
- •Type mismatches
- •Missing type definitions
- •Import errors
- •Interface violations
Formatting Errors:
- •Indentation issues
- •Quote style violations
- •Line break problems
- •Trailing comma issues
Linting Errors:
- •Unused variables
- •Missing dependencies
- •Code style violations
- •Best practice violations
Test Failures:
- •Assertion failures
- •Mock issues
- •Timeout errors
- •Component rendering failures
4. Prioritize Fixes
Fix in this order:
- •TypeScript errors - Must be fixed first (blocking)
- •Formatting errors - Auto-fixable
- •Linting errors - Most auto-fixable
- •Test failures - Requires analysis
5. Fix Issues Systematically
For TypeScript Errors:
# Check types cd embedded-components yarn typecheck # Fix type issues in code # Then re-check yarn typecheck
For Formatting Errors:
# Auto-fix all formatting cd embedded-components yarn format # Verify yarn format:check
For Linting Errors:
# Auto-fix linting cd embedded-components yarn lint:fix # Verify yarn lint
For Test Failures:
# Run specific test file cd embedded-components yarn test ComponentName.test.tsx # Run in watch mode for debugging yarn test:watch ComponentName.test.tsx # Fix test or implementation # Re-run tests yarn test
6. Verify All Fixes
Re-run complete test suite:
cd embedded-components yarn test
6. Iterate Until Green
Repeat steps 3-5 until all tests pass.
Common Failure Patterns
TypeScript: Missing Type
// ❌ Error: Parameter 'value' implicitly has an 'any' type const formatValue = (value) => value.toString(); // ✅ Fix: Add type annotation const formatValue = (value: number): string => value.toString();
TypeScript: Type Mismatch
// ❌ Error: Type 'string' is not assignable to type 'number'
const age: number = "25";
// ✅ Fix: Use correct type or convert
const age: number = 25;
// or
const age: number = parseInt("25", 10);
Formatting: Inconsistent Quotes
// ❌ Error: Replace `"` with `'` const name = "John"; // ✅ Fix: Auto-fixed by yarn format const name = 'John';
Linting: Unused Variable
// ❌ Error: 'unused' is assigned but never used const unused = "value"; const used = "other"; // ✅ Fix: Remove or use it const used = "other"; // or const unused = "value"; console.log(unused);
Linting: Missing useEffect Dependencies
// ❌ Error: React Hook useEffect has a missing dependency: 'userId'
useEffect(() => {
fetchUser(userId);
}, []);
// ✅ Fix: Add dependency
useEffect(() => {
fetchUser(userId);
}, [userId]);
Test: Assertion Failure
// ❌ Failure: expected 5 to equal 4
test("adds numbers", () => {
expect(add(2, 2)).toBe(5);
});
// ✅ Fix: Correct assertion or implementation
test("adds numbers", () => {
expect(add(2, 2)).toBe(4);
});
Test: Async Timeout
// ❌ Error: Timeout - Async callback was not invoked within timeout
test("loads data", () => {
renderComponent();
expect(screen.getByText("Data")).toBeInTheDocument();
});
// ✅ Fix: Use waitFor for async operations
test("loads data", async () => {
renderComponent();
await waitFor(() => {
expect(screen.getByText("Data")).toBeInTheDocument();
});
});
Test: Mock Not Reset
// ❌ Error: Mock from previous test affecting current test
test("test 1", () => {
server.use(http.get("/api/data", () => HttpResponse.json({ id: 1 })));
// test assertions
});
test("test 2", () => {
// Still using mock from test 1
// test assertions
});
// ✅ Fix: Reset handlers in renderComponent or beforeEach
beforeEach(() => {
server.resetHandlers();
});
Debugging Strategies
Isolate the Issue
# Run single test file cd embedded-components yarn test ComponentName.test.tsx # Run single test yarn test ComponentName.test.tsx -t "specific test name" # Run type check only yarn typecheck # Run linter only yarn lint
Use Watch Mode
# Watch mode for rapid iteration cd embedded-components yarn test:watch ComponentName.test.tsx
Verbose Output
# More detailed output cd embedded-components yarn test --verbose
Coverage Report
# Generate coverage report cd embedded-components yarn test:coverage # View report start coverage/index.html
Quick Fix Script
Create a PowerShell script to automate fixes:
# fix-issues.ps1
cd embedded-components
Write-Host "Formatting code..." -ForegroundColor Yellow
yarn format
Write-Host "Fixing linting..." -ForegroundColor Yellow
yarn lint:fix
Write-Host "Running tests..." -ForegroundColor Yellow
yarn test
if ($LASTEXITCODE -eq 0) {
Write-Host "All tests passed!" -ForegroundColor Green
} else {
Write-Host "Some tests failed. Review output above." -ForegroundColor Red
}
Best Practices
- •Fix one issue at a time - Don't batch unrelated fixes
- •Verify each fix - Run tests after each fix
- •Commit working code - Commit after all tests pass
- •Don't skip failures - Address all issues before committing
- •Use auto-fix first - Let tools fix what they can
- •Document complex fixes - Add comments for non-obvious fixes
- •Update tests if needed - Ensure tests reflect requirements
Time-Saving Tips
# Chain auto-fixes cd embedded-components yarn format; yarn lint:fix # Check specific file quickly yarn typecheck src/components/ComponentName.tsx # Run related tests only yarn test ComponentName # Keep tests running in watch mode yarn test:watch
Integration with Git
# Complete workflow before commit cd embedded-components yarn format; yarn lint:fix; yarn test # If all pass, commit cd .. git add embedded-components git commit -m "fix: resolve test failures" git push
Note: Always run yarn format first to ensure code is properly formatted before running tests.
Troubleshooting
Cache Issues
cd embedded-components yarn cache clean Remove-Item -Recurse -Force node_modules yarn install
Port Conflicts
# Find process using port netstat -ano | findstr :3000 # Kill process taskkill /PID <PID> /F
Memory Issues
$env:NODE_OPTIONS="--max-old-space-size=4096" cd embedded-components yarn test
How to Use
For detailed instructions, examples, and troubleshooting:
- •Full guide:
AGENTS.md- Complete workflow documentation
References
- •See
.github/skills/code-quality-workflow/for quality gates - •See
.github/skills/component-testing/for testing patterns - •See
AGENTS.mdfor complete workflow documentation