Generate Vitest + React Testing Library tests for Dify frontend components, hooks, and utilities. Triggers on testing, spec files, coverage, Vitest, RTL, unit tests, integration tests, or write/review test requests.
This skill enables Claude to generate high-quality, comprehensive frontend tests for the Dify project following established conventions and best practices.
β οΈ Authoritative Source: This skill is derived from web/docs/test.md. Use Vitest mock/timer APIs (vi.*).
When to Apply This Skill
Apply this skill when the user:
Asks to write tests for a component, hook, or utility
Asks to review existing tests for completeness
Mentions Vitest, React Testing Library, RTL, or spec files
Requests test coverage improvement
Uses pnpm analyze-component output as context
Mentions testing, unit tests, or integration tests for frontend code
Wants to understand testing patterns in the Dify codebase
Do NOT apply when:
User is asking about backend/API tests (Python/pytest)
User is asking about E2E tests (Playwright/Cypress)
User is only asking conceptual questions without code context
Quick Reference
Tech Stack
Tool
Version
Purpose
Vitest
4.0.16
Test runner
React Testing Library
16.0
Component testing
jsdom
-
Test environment
nock
14.0
HTTP mocking
TypeScript
5.x
Type safety
Key Commands
# Run all tests
pnpm test
# Watch mode
pnpm test:watch
# Run specific file
pnpm test path/to/file.spec.tsx
# Generate coverage report
pnpm test:coverage
# Analyze component complexity
pnpm analyze-component <path>
# Review existing test
pnpm analyze-component <path> --review
File Naming
Test files: ComponentName.spec.tsx (same directory as component)
NEVER generate all test files at once. For complex components or multi-file directories:
Analyze & Plan: List all files, order by complexity (simple β complex)
Process ONE at a time: Write test β Run test β Fix if needed β Next
Verify before proceeding: Do NOT continue to next file until current passes
For each file:
ββββββββββββββββββββββββββββββββββββββββββ
β 1. Write test β
β 2. Run: pnpm test <file>.spec.tsx β
β 3. PASS? β Mark complete, next file β
β FAIL? β Fix first, then continue β
ββββββββββββββββββββββββββββββββββββββββββ
Complexity-Based Order
Process in this order for multi-file testing:
π’ Utility functions (simplest)
π’ Custom hooks
π‘ Simple components (presentational)
π‘ Medium components (state, effects)
π΄ Complex components (API, routing)
π΄ Integration tests (index files - last)
When to Refactor First
Complexity > 50: Break into smaller pieces before testing
500+ lines: Consider splitting before testing
Many dependencies: Extract logic into hooks first
π See references/workflow.md for complete workflow details and todo list format.
Testing Strategy
Path-Level Testing (Directory Testing)
When assigned to test a directory/path, test ALL content within that path:
Test all components, hooks, utilities in the directory (not just index file)
Use incremental approach: one file at a time, verify each before proceeding
Goal: 100% coverage of ALL files in the directory
Integration Testing First
Prefer integration testing when writing tests for a directory:
β Import real project components directly (including base components and siblings)
β Only mock: API services (@/service/*), next/navigation, complex context providers
β DO NOT mock base components (@/app/components/base/*)
β DO NOT mock sibling/child components in the same directory
Modules are not mocked automatically. Global mocks live in web/vitest.setup.ts (for example react-i18next, next/image); mock other modules like ky or mime locally in test files.