一键导入
auto-test
소스 파일에 대한 Vitest 유닛 테스트를 자동으로 생성하고 실행합니다. "/auto-test [대상 파일 경로]" 형태로 사용합니다. 인자 없이 호출하면 git diff 기반으로 변경된 파일을 자동 감지합니다.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
소스 파일에 대한 Vitest 유닛 테스트를 자동으로 생성하고 실행합니다. "/auto-test [대상 파일 경로]" 형태로 사용합니다. 인자 없이 호출하면 git diff 기반으로 변경된 파일을 자동 감지합니다.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | auto-test |
| description | 소스 파일에 대한 Vitest 유닛 테스트를 자동으로 생성하고 실행합니다. "/auto-test [대상 파일 경로]" 형태로 사용합니다. 인자 없이 호출하면 git diff 기반으로 변경된 파일을 자동 감지합니다. |
이 스킬은 대상 소스 코드를 분석하여 Vitest 기반 유닛 테스트를 자동으로 생성하고, 테스트를 실행하여 통과 여부를 확인합니다. 실패 시 자동으로 수정하여 재실행합니다.
사용자는 테스트 대상 파일 경로를 제공하거나, 인자 없이 호출하여 git diff 기반 자동 감지를 사용할 수 있습니다.
사용자 입력에 따라 테스트 대상 파일을 결정합니다.
인자 없이 호출한 경우 (/auto-test):
git diff --name-only HEAD와 git diff --cached --name-only를 실행하여 변경/추가된 .ts, .tsx 파일을 감지합니다.*.test.ts, *.spec.ts)*.d.ts)main.tsx, App.tsx, instrument.ts, vite-env.d.ts)vite.config.ts, tailwind.config.ts, eslint.config.js 등)특정 파일 지정한 경우 (/auto-test src/hooks/useBooleanState.ts):
디렉토리 지정한 경우 (/auto-test src/hooks/):
.ts, .tsx 파일 중 같은 디렉토리에 .test.ts 파일이 없는 것을 모두 대상으로 합니다.대상 파일 결정 후 사용자에게 목록을 보여주고 확인을 받습니다:
테스트 대상 파일:
1. src/hooks/useBooleanState.ts (신규 테스트)
2. src/lib/utils.ts (신규 테스트)
진행하시겠습니까?
각 대상 파일을 읽고 다음을 분석합니다:
@sentry/react, @tanstack/react-query)window, document, addEventListener)@/lib/, @/constants/)[filename].test.ts가 이미 존재하면 기존 테스트를 읽어 중복되지 않도록 추가 테스트만 작성.claude/agents/unit-test-writer.md 파일을 읽어 테스트 작성 전략을 확인한 뒤, 해당 전략을 따라 테스트를 작성합니다.
핵심 전략:
4가지 커버리지 카테고리:
AAA 패턴: Arrange(준비), Act(실행), Assert(검증)
코드 유형별 패턴:
renderHook + act (@testing-library/react)async/await + rejects.toThrow테스트 구조:
describe('[함수/훅 이름]', () => {
describe('[시나리오/조건]', () => {
it('[기대 동작]', () => {
// Arrange
// Act
// Assert
});
});
});
모킹 규칙:
vi.mock() 사용vi.stubGlobal() 사용vi.useFakeTimers() / vi.useRealTimers()beforeEach/afterEach에서 정리파일 배치: 소스 파일과 같은 디렉토리에 [filename].test.ts로 생성
기존 테스트 파일이 있는 경우: 기존 describe 블록을 유지하고, 새로 추가된 함수/분기에 대한 테스트만 추가. 기존 테스트를 삭제하거나 수정하지 않음.
또한 기존 프로젝트의 테스트 패턴(src/lib/jumpCalculator.test.ts)을 참고하여 일관된 스타일을 유지합니다.
테스트 파일 생성/업데이트 후:
npm run test:run을 실행합니다.테스트가 실패하면:
에러 분석: 실패 원인을 분류합니다.
수정 적용: 원인에 따라 테스트 코드를 수정합니다.
재실행: npm run test:run으로 다시 확인합니다.
반복 제한: 최대 3회 반복 후에도 실패하면 실패 보고서와 함께 중단합니다.
auto-test 실행 결과
═══════════════════════════════════════
생성된 테스트 파일:
[신규] src/hooks/useBooleanState.test.ts
[추가] src/lib/jumpCalculator.test.ts
테스트 실행 결과:
전체: 25 통과: 25 실패: 0 스킵: 0
커버리지 요약:
useBooleanState.test.ts - Happy: 3 | Boundary: 2 | Edge: 2 | Error: 1
jumpCalculator.test.ts - Happy: 4 | Boundary: 3 | Edge: 2 | Error: 1
auto-test 실행 결과 (수정 필요)
═══════════════════════════════════════
시도 횟수: 3/3 (최대 도달)
실패한 테스트:
src/hooks/useMapDrag.test.ts
FAIL: '마우스 이동 시 onPanChange가 호출된다'
원인: jsdom 환경에서 MouseEvent 시뮬레이션 제한
수동 확인 필요:
- useMapDrag 훅은 브라우저 이벤트에 강하게 의존
- 통합 테스트(Playwright) 레벨에서 검증 권장
any 타입을 사용하지 않습니다. 필요 시 정확한 타입을 명시합니다.describe, it의 설명은 모두 한글로 작성합니다..tsx 컴포넌트의 렌더링 테스트는 이 스킬의 주 범위가 아닙니다.Math.random(), Date.now() 등은 반드시 모킹하여 결정론적 결과를 보장합니다.npm run test:run으로 실행하여 통과를 확인합니다.