协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
testing-best-practices【开发与工程】Unit testing, integration testing, and test-driven development principles. Use when writing tests, reviewing test code, improving test coverage, or setting up testing strategy. Triggers on "write tests", "review tests", "testing best practices", or "TDD".
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Unit testing, integration testing, and TDD principles for reliable, maintainable test suites. Contains 34 rules across 7 categories using TypeScript with Jest/Vitest.
Reference these guidelines when:
| Priority | Category | Impact | Prefix |
|---|---|---|---|
| 1 | Test Structure | CRITICAL | struct- |
| 2 | Test Isolation | CRITICAL | iso- |
| 3 | Assertions | HIGH | assert- |
| 4 | Test Data | HIGH | data- |
| 5 | Mocking | MEDIUM | mock- |
| 6 | Coverage | MEDIUM | cov- |
| 7 | Performance | LOW | perf- |
struct-aaa-pattern - Arrange, Act, Assert patternstruct-descriptive-names - Descriptive test namesstruct-one-assertion - One logical assertion per teststruct-describe-it - Organized test suites with describe/itstruct-given-when-then - BDD style when appropriatestruct-setup-teardown - Proper setup and teardowniso-independent-tests - Tests run independentlyiso-no-shared-state - No shared mutable stateiso-deterministic - Same result every runiso-no-order-dependency - Run in any orderiso-cleanup - Clean up after testsiso-test-doubles - Strategic use of test doublesassert-specific - Use specific assertionsassert-meaningful-messages - Helpful failure messagesassert-expected-actual - Expected value firstassert-no-magic-numbers - Use named constantsassert-custom-matchers - Custom matchers for domain logicdata-factories - Use factories for test datadata-builders - Builder pattern for complex objectsdata-faker - Generate realistic fake datadata-minimal - Minimal test datadata-realistic - Realistic edge casesdata-fixtures - Manage test fixturesmock-boundaries - Mock only at boundariesmock-verify-interactions - Verify important mock callsmock-minimal - Don't over-mockmock-realistic - Realistic mock behavior with MSWcov-meaningful - Focus on meaningful coveragecov-edge-cases - Cover edge cases and boundary valuescov-unhappy-paths - Test error scenarioscov-not-100-percent - 100% coverage isn't the goalperf-fast-unit - Keep unit tests fast (<50ms each)perf-parallel - Run tests in parallelperf-test-organization - Organize tests for fast feedbackit('calculates total with discount', () => {
// Arrange
const cart = new ShoppingCart();
cart.addItem({ name: 'Book', price: 20 });
cart.applyDiscount(0.1);
// Act
const total = cart.getTotal();
// Assert
expect(total).toBe(18);
});
// ✅ Describes behavior and scenario
describe('UserService.register', () => {
it('creates user with hashed password', () => {});
it('throws ValidationError when email is invalid', () => {});
it('sends welcome email after successful registration', () => {});
});
// ✅ Each test sets up its own data
beforeEach(() => {
mockRepository = { save: vi.fn(), find: vi.fn() };
service = new OrderService(mockRepository);
});
Read individual rule files for detailed explanations:
rules/struct-aaa-pattern.md
rules/iso-independent-tests.md
rules/mock-boundaries.md
rules/cov-meaningful.md
For the complete guide with all rules expanded: AGENTS.md