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".
Install
npx skills add https://github.com/asyrafhussin/agent-skills --skill testing-best-practicesSKILL.md
Testing Best Practices
Unit testing, integration testing, and TDD principles for reliable, maintainable test suites. Contains 34 rules across 7 categories using TypeScript with Jest/Vitest.
Metadata
- Version: 2.0.0
- Rule Count: 34 rules across 7 categories
- License: MIT
When to Apply
Reference these guidelines when:
- Writing unit or integration tests
- Reviewing test code quality
- Improving test coverage strategy
- Setting up testing infrastructure
- Debugging flaky or slow tests
Rule Categories by Priority
| 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- |
Quick Reference
1. Test Structure (CRITICAL)
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 teardown
2. Test Isolation (CRITICAL)
iso-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 doubles
3. Assertions (HIGH)
assert-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 logic
4. Test Data (HIGH)
data-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 fixtures
5. Mocking (MEDIUM)
mock-boundaries- Mock only at boundariesmock-verify-interactions- Verify important mock callsmock-minimal- Don't over-mockmock-realistic- Realistic mock behavior with MSW
6. Coverage (MEDIUM)
cov-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 goal
7. Performance (LOW)
perf-fast-unit- Keep unit tests fast (<50ms each)perf-parallel- Run tests in parallelperf-test-organization- Organize tests for fast feedback
Essential Guidelines
AAA Pattern (Arrange, Act, Assert)
it('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);
});
Descriptive Test Names
// ✅ 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', () => {});
});
Test Isolation
// ✅ Each test sets up its own data
beforeEach(() => {
mockRepository = { save: vi.fn(), find: vi.fn() };
service = new OrderService(mockRepository);
});
How to Use
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
References
Full Compiled Document
For the complete guide with all rules expanded: AGENTS.md
Related skills
tddmattpocock979KTest-driven development. Use when the user wants to build features or fix bugs test-first, mentions "red-green-refactor", or wants integration tests.diagnosing-bugsmattpocock678KDiagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.migrate-to-shoehornmattpocock388KMigrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data.systematic-debuggingobra275KUse when encountering any bug, test failure, or unexpected behavior, before proposing fixes