| name | analyzing-test-coverage |
| description | Creates and analyzes tests using Vitest and MSW patterns. Generates test builders, mocks repositories, and configures integration tests. Triggers on: write tests, test coverage, Vitest, MSW mock, vi.fn, vi.mock, unit test, integration test, test builder, mock setup, test failure. |
| allowed-tools | Read, Grep, Glob, Write, Edit, Bash(pnpm test:*) |
Testing Strategy Analyst
Purpose
Guide the creation of comprehensive tests following project patterns for unit tests, integration tests, and E2E tests using Vitest, MSW, and project-specific test helpers.
When to Use
- Writing new tests
- Analyzing test coverage gaps
- Setting up mocks for testing
- Organizing test files
- Debugging test failures
Table of Contents
Testing Stack
| Tool | Purpose |
|---|
| Vitest | Test runner and assertion library |
| MSW | Mock Service Worker for network mocking |
| vi | Vitest mock utilities |
| test-helpers/ | Project-specific test utilities |
Test Organization
src/
├── modules/
│ └── category/
│ ├── category-service.ts
│ ├── category-service.test.ts # Unit tests
│ ├── repository.ts
│ ├── repository.test.ts # Repository tests
│ └── category.integration.test.ts # Integration tests
├── core/
│ └── diff/
│ └── comparators/
│ ├── category-comparator.ts
│ └── category-comparator.test.ts
├── test-helpers/
│ ├── config-file-builder.ts
│ ├── graphql-mocks.ts
│ ├── config-fixtures.ts
│ └── cli-runner.ts
└── lib/
└── test-setup.ts # Global test setup
e2e/
└── ... # End-to-end tests
Quick Pattern Reference
Service Tests
See references/patterns.md for full examples. Key structure:
- Declare dependencies at suite level
- Reset mocks in
beforeEach with vi.clearAllMocks()
- Use describe blocks for method grouping
- Follow Arrange-Act-Assert pattern
Repository Tests with MSW
See references/patterns.md for MSW setup. Key steps:
- Define handlers with
graphql.query() / graphql.mutation()
- Setup server with
beforeAll / afterAll
- Override handlers for specific test cases with
server.use()
Test Data Builders
See references/test-builders.md for implementations. Pattern:
- Create builder class with fluent interface
- Validate with Zod schema in
build()
- Provide factory functions for convenience
Mock Functions
See references/patterns.md for examples. Common patterns:
vi.fn() for simple mocks
vi.mocked() for typed access
vi.mock() for module mocking
Running Tests
pnpm test
pnpm test -- --filter=category-service
pnpm test -- --grep="should create category"
pnpm test -- --watch
pnpm test -- --coverage
See references/commands-reference.md for advanced options and coverage configuration.
Test Quality Checklist
For Every Test
For Test Suites
Validation Checkpoints
| Phase | Validate | Command |
|---|
| Test written | File exists | Check *.test.ts created |
| Tests pass | All green | pnpm test <file> |
| Coverage adequate | Key paths covered | pnpm test --coverage |
| Mocks typed | No any in mocks | npx tsc --noEmit |
Common Pitfalls
Not Resetting Mocks:
beforeEach(() => {
vi.clearAllMocks();
});
Testing Implementation Details:
expect(service.internalMap.size).toBe(1);
expect(await service.findBySlug('test')).toBeDefined();
Flaky Async Tests:
const result = service.process();
expect(result).toBe(expected);
const result = await service.process();
expect(result).toBe(expected);
References
Skill Reference Files
references/patterns.md - Detailed test patterns with full code examples
references/test-builders.md - Builder pattern implementations
references/commands-reference.md - Complete command reference
Project Resources
{baseDir}/src/test-helpers/ - Test utilities
{baseDir}/vitest.config.ts - Test configuration
{baseDir}/docs/TESTING_PROTOCOLS.md - Testing protocols
External Documentation
Related Skills
- Complete entity workflow: See
adding-entity-types for E2E implementation including tests
- Zod test patterns: See
designing-zod-schemas for schema validation tests
- GraphQL mocking: See
writing-graphql-operations for MSW handlers
Quick Reference Rule
For a condensed quick reference, see .claude/rules/testing-standards.md (automatically loaded when editing *.test.ts files).