ワンクリックで
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으로 실행하여 통과를 확인합니다.