一键导入
nachui-testing-playbook
Use when writing or running automated tests inside packages/ui or verify regressions in NachUI.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when writing or running automated tests inside packages/ui or verify regressions in NachUI.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Use when modifying or extending CLI commands, prompts, build configurations, or API integrations in packages/cli.
Use when creating, modifying, or refactoring React components in the packages/ui directory of NachUI.
Use when building, extending, or consuming compound components — components made of multiple sub-parts assembled via dot notation (e.g. Dialog.Trigger, Card.Header, Accordion.Item).
Use when styling, designing, or adjusting UI layout, colors, variables, typography, and visual assets in NachUI.
Use when modifying documentation pages, routing, next-intl translations, MDX schemas, or AI functionality in apps/docs.
Use when consuming, importing, or integrating NachUI components inside apps/web or any app that depends on @repo/ui.
| name | nachui-testing-playbook |
| description | Use when writing or running automated tests inside packages/ui or verify regressions in NachUI. |
You are writing and executing tests for the NachUI library. All components must be thoroughly tested using Vitest and React Testing Library (RTL).
.test.ts or .test.tsx file extension.Do NOT use cd into packages. Run test commands from the root directory using pnpm workspace filters:
# Run tests in watch mode (interactive)
pnpm --filter @repo/ui test
# Run a full CI-style run (single run)
pnpm --filter @repo/ui test:run
# Generate test coverage reports
pnpm --filter @repo/ui test:coverage
# Launch Vitest's visual UI dashboard
pnpm --filter @repo/ui test:ui
Run targeted test suites or filters using the native vitest CLI arguments directly:
# Run tests for a specific utility
pnpm --filter @repo/ui vitest run src/lib/cn.test.ts
# Run tests matching a specific component and description
pnpm --filter @repo/ui vitest run src/components/button.test.tsx -t "renders loading state"
@testing-library/user-event over fireEvent to accurately simulate real browser interactions.getByRole('button', { name: /submit/i })) over generic querySelector or test IDs.beforeEach or afterEach.import { render, screen } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { describe, expect, it, vi } from 'vitest';
import { Button } from './button';
describe('Button Component', () => {
it('renders correctly with default values', () => {
render(<Button>Click me</Button>);
const button = screen.getByRole('button', { name: /click me/i });
expect(button).toBeInTheDocument();
});
it('triggers onClick handler when clicked', async () => {
const handleClick = vi.fn();
render(<Button onClick={handleClick}>Click me</Button>);
const button = screen.getByRole('button', { name: /click me/i });
await userEvent.click(button);
expect(handleClick).toHaveBeenCalledTimes(1);
});
it('does not trigger onClick when disabled', async () => {
const handleClick = vi.fn();
render(<Button onClick={handleClick} disabled>Click me</Button>);
const button = screen.getByRole('button', { name: /click me/i });
await userEvent.click(button);
expect(handleClick).not.toHaveBeenCalled();
});
});