Frontend Typescript Testing @shinpr
claudesonnetSkillDesigns tests with React Testing Library, MSW, and Playwright E2E. Applies component testing and E2E testing patterns.
Install
curl -o ~/.claude/skills/frontend-typescript-testing/SKILL.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/skills-en/frontend-typescript-testing/SKILL.mdDescription
TypeScript Testing Rules (Frontend)
References
| Test Type | Reference | When to Use | |-----------|-----------|-------------| | Unit / Integration | This document | Implementing React component tests with RTL + Vitest + MSW | | E2E | references/e2e.md | Implementing browser-level E2E tests with Playwright |
Test Framework
- Vitest: This project uses Vitest
- React Testing Library: For component testing
- MSW (Mock Service Worker): For API mocking
- Test imports:
import { describe, it, expect, beforeEach, vi } from 'vitest' - Component test imports:
import { render, screen } from '@testing-library/react' - User interaction:
import userEvent from '@testing-library/user-event' - Mock creation: Use
vi.mock()
Basic Testing Policy
Quality Requirements
- Coverage: Unit test coverage must be 60% or higher (Frontend standard 2025)
- Independence: Each test can run independently without depending on other tests
- Reproducibility: Tests are environment-independent and always return the same results
- Readability: Test code maintains the same quality as production code
Coverage Requirements (ADR-0002 Compliant)
Mandatory: Unit test coverage must be 60% or higher Component-specific targets:
- Atoms (Button, Text, etc.): 70% or higher
- Molecules (FormField, etc.): 65% or higher
- Organisms (Header, Footer, etc.): 60% or higher
- Custom Hooks: 65% or higher
- Utils: 70% or higher
Metrics: Statements, Branches, Functions, Lines
Test Types and Scope
-
Unit Tests (React Testing Library)
- Verify behavior of individual components or functions
- Mock all external dependencies
- Most numerous, implemented with fine granularity
- Focus on user-observable behavior
-
Integration Tests (React Testing Library + MSW)
- Verify coordination between multiple components
- Mock APIs with MSW (Mock Service Worker)
- No actual DB connections (backend manages DB)
- Verify major functional flows
-
Cross-functional Verification in E2E Tests
- Mandatory verification of impact on existing features when adding new features
- Cover integration points with "High" and "Medium" impact levels from Design Doc's "Integration Point Map"
- Verification pattern: Existing feature operation -> Enable new feature -> Verify continuity of existing features
- Success criteria: No change in displayed content, rendering time within 5 seconds
- Designed for automatic execution in CI/CD pipelines
Test Implementation Conventions
Directory Structure (Co-location Principle)
Rationale:
- React Testing Library best practice
- ADR-0002 Co-location principle
- Easy to find and maintain tests alongside implementation
Naming Conventions
- Test files:
{ComponentName}.test.tsx - Integration test files:
{FeatureName}.integration.test.tsx - Test suites: Names describing target components or features
- Test cases: Names describing expected behavior from user perspective
Test Code Quality Rules
Recommended: Keep all tests always active
- Merit: Guarantees test suite completeness
- Practice: Fix problematic tests and activate them
Avoid: test.skip() or commenting out
- Reason: Creates test gaps and incomplete quality checks
- Solution: Completely delete unnecessary tests
Mock Type Safety Enforcement
MSW (Mock Service Worker) Setup
Component Mock Type Safety
Basic React Testing Library Example
Test Design Patterns
Capabilities
- Vitest: This project uses Vitest
- React Testing Library: For component testing
- MSW (Mock Service Worker): For API mocking
- Test imports: import { describe, it, expect, beforeEach, vi } from 'vitest'
- Component test imports: import { render, screen } from '@testing-library/react'
- User interaction: import userEvent from '@testing-library/user-event'
- Mock creation: Use vi.mock()
- Coverage: Unit test coverage must be 60% or higher (Frontend standard 2025)
- Independence: Each test can run independently without depending on other tests
- Reproducibility: Tests are environment-independent and always return the same results
- Readability: Test code maintains the same quality as production code
- Atoms (Button, Text, etc.): 70% or higher
- Molecules (FormField, etc.): 65% or higher
- Organisms (Header, Footer, etc.): 60% or higher
- Custom Hooks: 65% or higher
Related Items
From the same repository — designed to work together
curl -o ~/.claude/skills/frontend-typescript-testing/SKILL.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/skills-en/frontend-typescript-testing/SKILL.md && curl -o ~/.claude/agents/investigator.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/investigator.md && curl -o ~/.claude/agents/ui-spec-designer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/ui-spec-designer.md && curl -o ~/.claude/agents/rule-advisor.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/rule-advisor.md && curl -o ~/.claude/agents/task-decomposer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/task-decomposer.md && curl -o ~/.claude/agents/document-reviewer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/document-reviewer.md && curl -o ~/.claude/agents/skill-reviewer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/skill-reviewer.mdInvestigator
Comprehensively collects problem-related information and creates evidence matrix. Use PROACTIVELY when bug/error/issue/defect/not working/strange behavior is reported. Reports only observations without proposing solutions.
curl -o ~/.claude/agents/investigator.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/investigator.mdUi Spec Designer
Creates UI Specifications from PRD and optional prototype code. Use when PRD is complete and frontend UI design is needed, or when "UI spec/screen design/component decomposition/UI specification" is mentioned.
curl -o ~/.claude/agents/ui-spec-designer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/ui-spec-designer.mdRule Advisor
Selects optimal rulesets for tasks and performs metacognitive analysis. MUST BE USED before any implementation task starts (CLAUDE.md required process). Analyzes task essence with task-analyzer skill and returns structured JSON.
curl -o ~/.claude/agents/rule-advisor.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/rule-advisor.mdTask Decomposer
Decomposes work plans into independent single-commit granularity tasks in docs/plans/tasks. Use PROACTIVELY when work plan (docs/plans/) is created, or when "task decomposition/split/decompose" is mentioned.
curl -o ~/.claude/agents/task-decomposer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/task-decomposer.mdDocument Reviewer
Reviews document consistency and completeness, providing approval decisions. Use PROACTIVELY after PRD/UI Spec/Design Doc/work plan creation, or when "document review/approval/check" is mentioned. Detects contradictions and rule violations with improvement suggestions.
curl -o ~/.claude/agents/document-reviewer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/document-reviewer.mdSkill Reviewer
Evaluates skill file quality against optimization patterns and editing principles. Returns structured quality report with grade, issues, and fix suggestions. Use when reviewing created or modified skill content.
curl -o ~/.claude/agents/skill-reviewer.md https://raw.githubusercontent.com/shinpr/ai-coding-project-boilerplate/main/.claude/agents-en/skill-reviewer.md