원클릭으로
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();
});
});