Testing Strategy
Comprehensive testing guidance for test architecture, coverage strategy, and test design.
Test Pyramid
| Level | Speed | Cost | Confidence | Share | |-------|-------|------|------------|-------| | Unit | ~1ms | Low | Narrow | 65-80% | | Integration | ~100ms | Medium | Medium | 15-25% | | Contract | ~10ms | Low | API shape | Part of unit | | E2E | ~1s+ | High | Broad | 5-10% |
Key Principles
- Test behavior, not implementation — test what code does, not how
- Follow the testing pyramid — more unit tests, fewer E2E
- Use meaningful coverage metrics — branch coverage over line coverage
- Prevent flaky tests — no arbitrary waits, no test interdependence
Quick Start Checklist
- Choose test framework (Vitest recommended for new projects)
- Design test folder structure mirroring source
- Write unit tests for pure logic and utilities
- Add integration tests for API endpoints and data flows
- Add contract tests against OpenAPI spec (if applicable)
- Add E2E tests for critical user journeys only
- Set up CI to run tests on every PR
What NOT to Test
- Framework internals (React rendering, Express routing)
- Third-party library behavior
- Trivial getters/setters with no logic
- Implementation details (private methods, internal state)
References
| Reference | Description | |-----------|-------------| | test-architecture-structure.md | Project structures, shared utilities, test configuration | | test-architecture-isolation.md | Playwright config, database isolation, performance optimization | | test-design-techniques.md | Equivalence partitioning, boundary values, decision tables, state transitions | | test-design-error-and-advanced.md | Error handling tests, property-based testing, parameterization, regression | | frontend-react-testing.md | React Testing Library, queries, user events, hooks, forms | | frontend-vue-a11y-visual.md | Vue Test Utils, accessibility, visual/Storybook testing, anti-patterns | | e2e-playwright.md | Playwright POM, fixtures, auth state, API mocking, visual comparison | | e2e-cypress-and-stability.md | Cypress patterns, flaky test prevention, test data, debugging | | mocking-fundamentals.md | Mock decision tree, stubs/mocks/spies/fakes, MSW setup and usage | | mocking-modules-and-patterns.md | Module mocking, time mocking, anti-patterns, dependency injection | | coverage-guide.md | Coverage metrics, meaningful thresholds, CI integration | | api-test-frameworks-setup.md | Vitest and Jest setup, configuration, running tests | | api-test-supertest-and-helpers.md | Supertest usage, request helpers, custom matchers, snapshots, debugging | | api-integration-patterns.md | CRUD endpoint tests, relationship tests | | api-auth-patterns.md | Login/logout, protected routes, authorization, auth helpers | | api-e2e-and-edge-cases.md | Multi-step workflow tests, error responses, edge cases | | api-test-data-factories.md | Factory patterns, builders, fixtures | | api-test-data-database.md | Database helpers, cleanup strategies, data generation | | api-contract-openapi.md | OpenAPI/AJV schema validation, contract tests | | api-contract-zod-advanced.md | Zod validation, response shape testing, breaking change detection | | api-test-ci-pipelines.md | CI pipeline strategy, GitHub Actions, parallel execution | | api-test-ci-environments.md | Environment config, test reporting, database services, E2E environments | | anti-rationalization.md | Iron Law, common rationalizations, red flag STOP list for TDD discipline |