| name | test-complete |
| description | Runs unit tests (Jest), optional E2E tests (Playwright), TypeScript type check, and ESLint, then reports results with pass/fail details, coverage, and a clear commit-readiness judgment. Recommended before every commit. Triggered by: "ãã¹ãå®è¡", "ãã¹ã確èª", "ã«ãã¬ããžç¢ºèª", "å質ãã§ãã¯", "ãã¹ããã§ãã¯", "ã³ãããå確èª", "test run", "run tests", "check coverage", "quality check", "pre-commit check".
|
| invocation | automatic |
| allowed-tools | ["Bash","Read","Grep"] |
Test Complete ã¹ãã«
ç®ç
ãŠããããã¹ãïŒJestïŒã»åãã§ãã¯ã»ãªã³ããå®è¡ããçµæãã¬ããŒãããŠã³ãããå¯åŠãå€å®ããã¹ãã«ãE2E ãã¹ãã¯ãŠãŒã¶ãŒãæç€ºçã«èŠæ±ããå Žåã®ã¿å®è¡ããã
å®è¡æé ïŒãã®é çªãå³å®ããããšïŒ
Step 1ïœå®è¡ã¹ã³ãŒããæ±ºå®ãã
| æ¡ä»¶ | å®è¡å
容 |
|---|
| æç€ºçãªæå®ãªãïŒããã©ã«ãïŒ | ãŠããããã¹ã + åãã§ã㯠+ ãªã³ã |
| ãE2Eãå«ããŠããšæå®ãã | äžèš + E2E ãã¹ã |
| ãç¹å®ãã¡ã€ã«ã®ã¿ããšæå®ãã | 察象ãã¡ã€ã«ã®ã¿å®è¡ |
| ãã®ã£ããåæããã«ãã¬ããžã®ã£ããããšæå®ãã | ã«ãã¬ããžä»ããã¹ã + ã®ã£ããã¬ããŒã |
Step 2ïœãŠããããã¹ããå®è¡ããïŒJestïŒ
bun run test
bun run test -- --testPathPattern=<pattern>
bun run test -- --coverage
åºåãã以äžãæœåºããïŒ
- ãã¹ãç·æ°ã»æåæ°ã»å€±ææ°ã»ã¹ãããæ°
- ã«ãã¬ããžïŒStatements / Branches / Functions / LinesïŒ
- 倱æãã¹ãã®ãã¡ã€ã«åã»ãã¹ãåã»ãšã©ãŒã¡ãã»ãŒãžã»è¡çªå·
Step 3ïœåãã§ãã¯ãå®è¡ãã
bunx tsc --noEmit
ãšã©ãŒãæ€åºãããå Žåã¯ãã¡ã€ã«åã»è¡çªå·ã»ãšã©ãŒã¡ãã»ãŒãžãæœåºããã
Step 4ïœãªã³ããå®è¡ãã
bun run lint
ãšã©ãŒã»èŠåãæ€åºãããå Žåã¯ã«ãŒã«åã»ãã¡ã€ã«åã»è¡çªå·ã»ã¡ãã»ãŒãžãæœåºããã
Step 5ïœE2E ãã¹ããå®è¡ããïŒèŠæ±ãããå Žåã®ã¿ïŒ
ls -la tests/e2e/seed/seed-e2e.ts
bun run seed:e2e
bunx playwright test
bunx playwright test --project=chromium
bunx playwright test tests/e2e/<file>.spec.ts
Step 6ïœã¬ããŒããåºåãã
## ãã¹ãå®è¡çµæ
### ãŠããããã¹ãïŒJestïŒ
- å®è¡: [ç·æ°] tests
- æå: [æåæ°] passed
- 倱æ: [å€±ææ°] failed
- ã¹ããã: [ã¹ãããæ°] skipped
- ã«ãã¬ããž: Statements [%] / Branches [%] / Functions [%] / Lines [%]
### 倱æãããã¹ãïŒå€±æãããå Žåã®ã¿ïŒ
#### 1. `src/queries/XXX.test.ts`
**ãã¹ã**: `describeå > itå`
**ãšã©ãŒ**:
Expected: { success: true, data: {...} }
Received: { success: false, error: "..." }
**æšå¥šå¯Ÿå¿**:
1. `src/lib/schemas.ts` ã® `XXXSchema` ã確èª
2. `src/config/test-fixtures.ts` ã® `createTestXXX()` ã確èª
---
### åãã§ãã¯ïŒTypeScriptïŒ
- ã¹ããŒã¿ã¹: â
ãšã©ãŒãªã / â [N] errors
#### ãšã©ãŒè©³çްïŒãšã©ãŒãããå Žåã®ã¿ïŒ
1. `src/queries/XXX.ts:42:15`
Type 'string | undefined' is not assignable to type 'string'.
æšå¥šå¯Ÿå¿: åã¬ãŒããŸã㯠`??` ã䜿çš
---
### ãªã³ãïŒESLintïŒ
- ã¹ããŒã¿ã¹: â
ãšã©ãŒã»èŠåãªã / â ïž [N] warnings / â [N] errors
#### 詳现ïŒãšã©ãŒã»èŠåãããå Žåã®ã¿ïŒ
1. `src/components/store/XXX.tsx:28:10`
ã«ãŒã«: `@next/next/no-img-element`
æšå¥šå¯Ÿå¿: `<img>` ã `<Image />` ã«çœ®ãæã
---
### E2E ãã¹ãïŒPlaywrightïŒïŒå®è¡ããå Žåã®ã¿ïŒ
- å®è¡: [ç·æ°] tests (Chromium: N, Firefox: N, WebKit: N)
- æå: [æåæ°] passed
- 倱æ: [å€±ææ°] failed
- æèŠæé: [ç§]s
---
### ã«ãã¬ããžã®ã£ããïŒã®ã£ããåæã¢ãŒãæã®ã¿ïŒ
| ãã¡ã€ã« | Stmts | Branch | Func | Lines | æšå¥š |
|---------|-------|--------|------|-------|------|
| `src/queries/XXX.ts` | 65% | 45% | 70% | 63% | P0: åå²ã«ãã¬ããžæ¹å |
**æªãã¹ã颿°ïŒexport ãããŠããããã¹ããªãïŒ:**
- `src/queries/XXX.ts`: `functionA`, `functionB`
> ãã¹ã远å ã«ã¯ `test-gen` ã¹ãã«ã䜿çšããŠãã ããïŒãXXX ã®ãã¹ãã远å ããŠãã§å®è¡å¯èœïŒ
---
### ã³ãããå€å®
â
ã³ãããå¯èœ â å
šãã¹ãæåã»åãšã©ãŒãªãã»ãªã³ããšã©ãŒãªã
â ïž æ¡ä»¶ä»ãã³ãããå¯èœ â èŠåã®ã¿ïŒãšã©ãŒãªãïŒ
â ã³ãããäžå¯ â ãã¹ã倱æ / åãšã©ãŒ / ãªã³ããšã©ãŒãã
Step 7ïœæ¬¡ã®ã¢ã¯ã·ã§ã³ãææ¡ãã
ãã¹ã倱æã»ãšã©ãŒãã
## 次ã®ã¢ã¯ã·ã§ã³ïŒå¿
é ã»ã³ãããåã«ä¿®æ£ïŒ
- [ ] `src/queries/XXX.test.ts` ã®å€±æãã¹ããä¿®æ£
- [ ] `src/queries/XXX.ts:42` ã®åãšã©ãŒãä¿®æ£
## 次ã®ã¢ã¯ã·ã§ã³ïŒæšå¥šïŒ
- [ ] ã«ãã¬ããž 80% æªæºã®ç®æã«ãã¹ãã远å
- `src/queries/coupon.ts`: 65.3%
- `src/queries/offer-tag.ts`: 72.1%
- [ ] ESLint èŠåãä¿®æ£
å
šãã¹ãæå
## 次ã®ã¢ã¯ã·ã§ã³
â
å
šãã¹ãæåãã³ãããå¯èœã§ã
- [ ] ã«ãã¬ããž 80% æªæºã®ç®æãããã°ãã¹ã远å ãæ€èš
â `test-gen` ã¹ãã«ã§è¿œå å¯èœïŒãXXX ã®ãã¹ãã远å ããŠãã§å®è¡ïŒ
- [ ] `git add . && git commit -m "feat: ..."`
## 仿§æžã»é²æããã¥ã¡ã³ãã®åæïŒãã§ãŒãºå®äºã»æ©èœå®è£
æã¯å¿
é ïŒ
以äžã®ããããã«è©²åœããå Žå㯠`spec-sync-after-test` ãå¿
ãèµ·åãã:
- æ°ãããµãŒããŒã¢ã¯ã·ã§ã³ïŒ`src/queries/*.ts`ïŒã远å ãã
â `specs/04-interfaces.md` ã«ã¢ãžã¥ãŒã«ã»é¢æ°ã远èš
- æ°ããããŒãžã»ã¯ãŒã¯ãããŒã远å ããïŒ`src/app/**/*.tsx`ïŒ
â `specs/05-workflows.md` ã«ãããŒã远èš
- Phase / Task ãå®äºãã
â `docs/design/*/PROGRESS.md` ã `â
` ã«æŽæ° + `docs/PROGRESS.md` 次ã¢ã¯ã·ã§ã³ããã³ãããæ¬¡ãã§ãŒãºãžçœ®æ
- å®è£
ã§ Open Question ã解決ãã
â `specs/08-open-questions.md` ã« resolved 泚èšã远å
- æ°ããã³ããããç©ãŸããïŒãã¹ãæ°å€åã®æç¡ã«ãããããïŒ
â `QA_HANDOFF.md` ã® HEAD ããã·ã¥ãšã³ãããå±¥æŽããŒãã«ãæŽæ°
â ïž ãã¹ãæ°ãå€åããªã UI å®è£
ã»ãã§ãŒãºå®äºã§ã `spec-sync-after-test` ã¯å¿
èŠã
ããã¹ãæ°ãå€ãã£ãŠããªãããäžèŠããšãã倿ã¯èª€ãã
éèŠã«ãŒã«
â çµ¶å¯ŸçŠæ¢
it.skip() / it.only() ã®ã³ãããïŒãããã°æã®äžæäœ¿çšã¯å¯ãã³ãããåã«å¿
ãåé€ïŒ
// @ts-ignore ã«ããåãšã©ãŒã®ç¡èŠïŒ@ts-expect-error + çç±ã³ã¡ã³ãã«éã蚱容ïŒ
- ãããã°çš
console.log() ã®ã³ããã
â
å¿
é
- ã³ãããåã«ãŠããããã¹ãã»åãã§ãã¯ã»ãªã³ããå®è¡ãã
- ãã¹ã倱æã»åãšã©ãŒã»ãªã³ããšã©ãŒãããå Žåã¯ã³ãããããªã
- æ°ããã³ãŒãã«ã¯ãã¹ãã远å ããã«ãã¬ããž 80% 以äžãç¶æãã
ð¡ æšå¥š
- ãã¹ã㯠AAA ãã¿ãŒã³ïŒArrange / Act / AssertïŒã§èšè¿°ãã
- ãã¹ãåã¯ãæ£åžžã±ãŒã¹: [å
容]ããç°åžžã±ãŒã¹: [å
容]ãã®åœ¢åŒã«ãã
- E2E ãã¹ã㯠UI 倿Žãã¯ãŒã¯ãããŒå€æŽæã®ã¿å®è¡ããïŒå®è¡æéãé·ãããïŒ
åè: äž»èŠã³ãã³ã
bun run test
bun run test -- --testPathPattern=src/queries/XXX.test.ts
bun run test -- --coverage
bun run test:watch
bun run test -- --onlyChanged
bunx playwright test
bunx playwright test --project=chromium
bunx playwright test tests/e2e/cart-smoke.spec.ts
bunx playwright test --ui
bun run seed:e2e
bunx tsc --noEmit
bun run lint
bun run lint --fix
bunx prettier --check .
bunx prettier --write <file>
bunx prisma generate
bunx prisma validate
bunx prisma studio
åè: äž»èŠãã¡ã€ã«ãã¹
# ãã¹ãèšå®
jest.config.js Jest èšå®
playwright.config.ts Playwright èšå®
tests-setup/jest.setup.ts Jest ã»ããã¢ãã
# ãã¹ããã¡ã€ã«
src/queries/*.test.ts ãŠããããã¹ã
tests/e2e/*.spec.ts E2E ãã¹ã
tests/e2e/seed/seed-e2e.ts E2E ã·ãŒãããŒã¿
# ãã¹ãå
±éã€ã³ãã©
src/config/test-fixtures.ts ãã¹ããã¡ã¯ããª
src/config/test-helpers.ts ãã¹ããã«ããŒ
src/config/test-scenarios.ts ãã¹ãã·ããªãª
src/config/test-config.ts ãã¹ã宿°
# ãã«ãèšå®
package.json ãã¹ãã¹ã¯ãªããå®çŸ©
tsconfig.json TypeScript èšå®
.eslintrc.json ESLint èšå®