Files
docs/TESTING_STANDARDS.md
2026-02-09 21:51:46 -08:00

231 lines
4.2 KiB
Markdown

# Testing Standards
**Last Updated**: 2025-01-27
**Purpose**: Standardized testing guidelines for all projects
---
## Overview
This document establishes testing standards and best practices for all projects in the workspace.
---
## Testing Stack
### TypeScript/JavaScript Projects
- **Unit Tests**: Vitest (recommended) or Jest
- **Integration Tests**: Vitest or Jest with test database
- **E2E Tests**: Playwright (recommended) or Cypress
- **API Tests**: Vitest/Jest with Supertest
### Solidity Projects
- **Unit Tests**: Foundry (forge test)
- **Integration Tests**: Foundry with fork testing
- **Fuzz Tests**: Foundry fuzzing
- **Invariant Tests**: Foundry invariant testing
### Python Projects
- **Unit Tests**: pytest
- **Integration Tests**: pytest with fixtures
- **E2E Tests**: pytest with Selenium/Playwright
---
## Coverage Requirements
### Minimum Coverage
- **Unit Tests**: 80% coverage minimum
- **Critical Paths**: 100% coverage
- **Integration Tests**: Cover major workflows
- **E2E Tests**: Cover user journeys
### Coverage Reporting
- Generate coverage reports
- Track coverage over time
- Set coverage thresholds
- Fail builds below threshold
---
## Test Structure
### Directory Structure
```
tests/
├── unit/ # Unit tests
│ └── [component].test.ts
├── integration/ # Integration tests
│ └── [feature].test.ts
├── e2e/ # End-to-end tests
│ └── [scenario].spec.ts
└── fixtures/ # Test fixtures
└── [fixtures]
```
### Naming Conventions
- Unit tests: `[component].test.ts`
- Integration tests: `[feature].integration.test.ts`
- E2E tests: `[scenario].e2e.spec.ts`
---
## Testing Best Practices
### Unit Tests
- Test individual functions/components
- Mock external dependencies
- Test edge cases
- Keep tests fast
- Use descriptive test names
### Integration Tests
- Test component interactions
- Use test databases
- Clean up after tests
- Test error scenarios
- Verify data consistency
### E2E Tests
- Test user workflows
- Use realistic data
- Test critical paths
- Keep tests stable
- Use page object model
---
## Test Execution
### Local Development
```bash
# Run all tests
pnpm test
# Run unit tests only
pnpm test:unit
# Run integration tests
pnpm test:integration
# Run E2E tests
pnpm test:e2e
# Run with coverage
pnpm test:coverage
```
### CI/CD
- Run tests on every commit
- Run full test suite on PR
- Run E2E tests on main branch
- Fail builds on test failure
- Generate coverage reports
---
## Test Data Management
### Fixtures
- Use fixtures for test data
- Keep fixtures realistic
- Update fixtures as needed
- Document fixture purpose
### Test Databases
- Use separate test databases
- Reset between tests
- Use migrations
- Seed test data
---
## Performance Testing
### Requirements
- Test critical paths
- Set performance budgets
- Monitor performance metrics
- Load testing for APIs
### Tools
- Lighthouse for web apps
- k6 for API load testing
- Web Vitals for frontend
- Performance profiling
---
## Security Testing
### Requirements
- Test authentication/authorization
- Test input validation
- Test security headers
- Test dependency vulnerabilities
### Tools
- npm audit / pnpm audit
- Snyk
- OWASP ZAP
- Security linters
---
## Test Maintenance
### Regular Updates
- Update tests with code changes
- Remove obsolete tests
- Refactor tests as needed
- Keep tests fast
### Test Reviews
- Review tests in PRs
- Ensure adequate coverage
- Verify test quality
- Document test strategy
---
## Examples
### TypeScript Unit Test Example
```typescript
import { describe, it, expect } from 'vitest';
import { myFunction } from './myFunction';
describe('myFunction', () => {
it('should return expected result', () => {
expect(myFunction(input)).toBe(expectedOutput);
});
});
```
### Solidity Test Example
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "forge-std/Test.sol";
import "../src/MyContract.sol";
contract MyContractTest is Test {
MyContract public contract;
function setUp() public {
contract = new MyContract();
}
function testFunction() public {
// Test implementation
}
}
```
---
**Last Updated**: 2025-01-27
**Next Review**: Q2 2025