Agent skill

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".

Stars 22
Forks 2

Install this agent skill to your Project

npx add-skill https://github.com/AsyrafHussin/agent-skills/tree/main/skills/testing-best-practices

Metadata

Additional technical details for this skill

author
agent-skills
version
2.0.0

SKILL.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 pattern
  • struct-descriptive-names - Descriptive test names
  • struct-one-assertion - One logical assertion per test
  • struct-describe-it - Organized test suites with describe/it
  • struct-given-when-then - BDD style when appropriate
  • struct-setup-teardown - Proper setup and teardown

2. Test Isolation (CRITICAL)

  • iso-independent-tests - Tests run independently
  • iso-no-shared-state - No shared mutable state
  • iso-deterministic - Same result every run
  • iso-no-order-dependency - Run in any order
  • iso-cleanup - Clean up after tests
  • iso-test-doubles - Strategic use of test doubles

3. Assertions (HIGH)

  • assert-specific - Use specific assertions
  • assert-meaningful-messages - Helpful failure messages
  • assert-expected-actual - Expected value first
  • assert-no-magic-numbers - Use named constants
  • assert-custom-matchers - Custom matchers for domain logic

4. Test Data (HIGH)

  • data-factories - Use factories for test data
  • data-builders - Builder pattern for complex objects
  • data-faker - Generate realistic fake data
  • data-minimal - Minimal test data
  • data-realistic - Realistic edge cases
  • data-fixtures - Manage test fixtures

5. Mocking (MEDIUM)

  • mock-boundaries - Mock only at boundaries
  • mock-verify-interactions - Verify important mock calls
  • mock-minimal - Don't over-mock
  • mock-realistic - Realistic mock behavior with MSW

6. Coverage (MEDIUM)

  • cov-meaningful - Focus on meaningful coverage
  • cov-edge-cases - Cover edge cases and boundary values
  • cov-unhappy-paths - Test error scenarios
  • cov-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 parallel
  • perf-test-organization - Organize tests for fast feedback

Essential Guidelines

AAA Pattern (Arrange, Act, Assert)

typescript
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

typescript
// ✅ 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

typescript
// ✅ 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

Expand your agent's capabilities with these related and highly-rated skills.

AsyrafHussin/agent-skills

laravel-owasp-security

OWASP Top 10 security audit and secure coding guidelines for Laravel + React/Inertia.js applications. Use when auditing for vulnerabilities ("run OWASP audit", "security review", "check my app security") or writing secure Laravel code involving auth, payments, file uploads, or API design. Triggers on security-related tasks, payment handling, authentication, or any request to audit a Laravel codebase.

22 2
Explore
AsyrafHussin/agent-skills

laravel-ai-sdk

Laravel AI SDK for building AI-powered features. Use when creating agents, generating images or audio, working with embeddings, vector search, or testing AI features. Triggers on tasks involving laravel/ai, AI agents, tool-calling, structured output, streaming, embeddings, reranking, or AI faking in tests.

22 2
Explore
AsyrafHussin/agent-skills

php-best-practices

PHP 8.x modern patterns, PSR standards, and SOLID principles. Use when reviewing PHP code, checking type safety, auditing code quality, or ensuring PHP best practices. Triggers on "review PHP", "check PHP code", "audit PHP", or "PHP best practices".

22 2
Explore
AsyrafHussin/agent-skills

react-vite-best-practices

React and Vite performance optimization guidelines. Use when writing, reviewing, or optimizing React components built with Vite. Triggers on tasks involving Vite configuration, build optimization, code splitting, lazy loading, HMR, bundle size, or React performance.

22 2
Explore
AsyrafHussin/agent-skills

laravel-mcp

Laravel MCP server development. Use when building MCP servers, tools, prompts, or resources for AI client integration. Triggers on tasks involving laravel/mcp, MCP tools, MCP prompts, MCP resources, or AI client protocols.

22 2
Explore
AsyrafHussin/agent-skills

state-management

React Query and Zustand patterns for state management. Use when implementing data fetching, caching, mutations, or client-side state. Triggers on tasks involving useQuery, useMutation, Zustand stores, caching, or state management.

22 2
Explore

Didn't find tool you were looking for?

Be as detailed as possible for better results