diff --git a/.claude/skills/laravel-unit-test/skill.md b/.claude/skills/laravel-unit-test/skill.md index 431cde8..1acde5b 100644 --- a/.claude/skills/laravel-unit-test/skill.md +++ b/.claude/skills/laravel-unit-test/skill.md @@ -10,38 +10,42 @@ Skill này là công cụ chính để tự động tạo ra file Unit Test cho ## Cách kích hoạt Người dùng có thể kích hoạt linh hoạt theo các chế độ (từ 1 lệnh duy nhất cho toàn bộ dự án đến từng file đơn lẻ): -1. **🌟 Chế độ 1 Lệnh Duy Nhất Cho Toàn Bộ Dự Án (All-in-One Full Coverage Mode - Khuyên dùng cho dự án lớn)**: +1. **🌟 Chế độ Autopilot Khép Kín: Viết Xong Chạy Test Luôn (`--all --run` hoặc `--autopilot`)**: ```text - /laravel-unit-test --all - ``` - **Cơ chế cam kết không bỏ sót bất kỳ file nào:** - - **Giai đoạn 1 (Lập Manifest Kiểm Soát)**: Tự động quét toàn bộ `app/` (và `Modules/`), lọc ra tất cả các class có logic (Services, Actions, FormRequests, Rules, Jobs, Policies, Middlewares, Listeners, Observers, Repositories, Custom Casts). Lập file danh sách kiểm soát `tests/.test-manifest.json` (ví dụ: Tổng cộng 42 files). - - **Giai đoạn 2 (Thực Thi Tuần Tự & Theo Dõi Tiến Độ)**: Duyệt tuần tự từng class trong manifest (`[1/42]`, `[2/42]`,...), sinh test tương ứng và đánh dấu `[COMPLETED]`. Không bao giờ bị tràn context và có thể tiếp tục nếu bị gián đoạn. - - **Giai đoạn 3 (Tự Động Chạy Thử & Sửa Lỗi Ngay - Auto-Healing)**: Sinh xong file nào lập tức chạy `./test-runner.sh --filter=` cho file đó. Nếu FAIL -> Tự động đọc log lỗi và sửa lại test cho đến khi PASS 100%. - - **Giai đoạn 4 (Báo Cáo Nghiệm Thu Độ Phủ)**: Chạy `./test-runner.sh --coverage` và in bảng tổng kết: `42/42 files covered, 100% Passed, Code Coverage: > 80%`. - -2. **Chế độ Hàng loạt theo Thư mục (Batch Directory Mode)**: - ```text - /laravel-unit-test app/Services/ + /laravel-unit-test --all --run # Hoặc: - /laravel-unit-test app/Actions/ + /laravel-unit-test --autopilot + ``` + *Chỉ với 1 lệnh duy nhất, Agent sẽ thực thi trọn vẹn quy trình 4-trong-1:* + - **Tự động Setup**: Kiểm tra dependencies & SQLite in-memory, tự cài đặt gói thiếu. + - **Tự động Quét**: Lập manifest toàn bộ class trong dự án `app/`. + - **Tự động Viết & Test Ngay**: Sinh test đến đâu -> Chạy test `./test-runner.sh` ngay đến đó. + - **Tự động Sửa Lỗi (Auto-Healing)**: Nếu test đỏ (Fail) -> Tự đọc log lỗi và sửa lại test cho đến khi XANH (Pass 100%). + - **Nghiệm thu**: Đo Code Coverage và in bảng tổng kết cuối cùng. + +2. **Chế độ Viết Cho 1 File & Test Luôn (`--run`)**: + ```text + /laravel-unit-test app/Services/PaymentService.php --run + ``` + *Sinh test cho class và lập tức chạy thử để xác nhận Pass 100% trước khi hoàn thành.* + +3. **Chế độ Hàng loạt theo Thư mục (Batch Directory Mode)**: + ```text + /laravel-unit-test app/Services/ --run + # Hoặc toàn bộ Actions: + /laravel-unit-test app/Actions/ --run ``` -3. **Chế độ Theo Module / DDD (Module Mode)**: +4. **Chế độ Theo Module / DDD (Module Mode)**: ```text - /laravel-unit-test Modules/Order/ + /laravel-unit-test Modules/Order/ --run # Hoặc: - /laravel-unit-test app/Domains/Payment/ - ``` - -4. **Chế độ Quét & Phủ Test Toàn Dự Án (Untested Audit Mode)**: - ```text - /laravel-unit-test --untested + /laravel-unit-test app/Domains/Payment/ --run ``` 5. **Chế độ Theo Git Diff (Changed Files Mode - Dành Cho Pull Request)**: ```text - /laravel-unit-test --changed + /laravel-unit-test --changed --run ``` 6. **Chế độ File đơn lẻ (Single File Mode)**: diff --git a/README.md b/README.md index 1136a97..a99e00d 100644 --- a/README.md +++ b/README.md @@ -101,20 +101,20 @@ Mở Claude Code (`claude`) tại thư mục dự án và chạy skill: ``` Agent sẽ tự động kiểm tra `composer.json`, kiểm tra database test SQLite và tự cài đặt các package còn thiếu. -### Bước 3: Sinh Unit Test Tự Động +### Bước 3: Sinh Unit Test Tự Động & Chạy Test Ngay Chỉ định class, thư mục, hoặc phủ toàn bộ dự án: ```bash -# 🌟 1 lệnh duy nhất phủ test toàn bộ dự án (cam kết không sót file): -/laravel-unit-test --all +# 🌟 1 lệnh duy nhất Autopilot: Tự động viết test cả dự án & TỰ CHẠY TEST LUÔN: +/laravel-unit-test --all --run -# Cho cả thư mục / module: -/laravel-unit-test app/Services/ +# Sinh test cho 1 file & tự động chạy test kiểm tra ngay: +/laravel-unit-test app/Services/PaymentService.php --run -# Cho các file vừa sửa trên Git (trước khi tạo PR): -/laravel-unit-test --changed +# Cho cả thư mục / module & test luôn: +/laravel-unit-test app/Services/ --run -# Cho 1 class đơn lẻ: -/laravel-unit-test app/Services/PaymentService.php +# Cho các file vừa sửa trên Git & test luôn (trước khi tạo PR): +/laravel-unit-test --changed --run ``` ### Bước 4: Chạy Kiểm Thử diff --git a/USAGE-GUIDE.md b/USAGE-GUIDE.md index f8fc20b..b873e41 100644 --- a/USAGE-GUIDE.md +++ b/USAGE-GUIDE.md @@ -123,16 +123,26 @@ Trước khi viết bài test đầu tiên, hãy kiểm tra và cài đặt đ Tùy vào nhu cầu thực tế, bạn chọn 1 trong 5 cách sau: -#### 🌟 Cách 1: 1 LỆNH DUY NHẤT PHỦ TOÀN BỘ FILE TRONG DỰ ÁN (`--all`) -Khi bạn muốn AI tự động viết test cho toàn bộ dự án từ A-Z mà đảm bảo không bỏ sót bất kỳ file nào: +#### 🌟 Cách 1: 1 LỆNH AUTOPILOT VIẾT TOÀN BỘ VÀ TỰ CHẠY TEST LUÔN (`--all --run`) +Khi bạn muốn AI tự động viết test cho toàn bộ dự án từ A-Z, **viết đến đâu tự chạy test đến đó và tự sửa lỗi nếu test fail**: ```text -/laravel-unit-test --all +/laravel-unit-test --all --run +# Hoặc: +/laravel-unit-test --autopilot +``` +🎯 **Quy trình 4-trong-1 hoàn toàn tự động:** +1. **Tự động Setup**: Tự kiểm tra môi trường, cấu hình SQLite `:memory:` và tự cài packages nếu thiếu. +2. **Lập Manifest Kiểm Soát**: Quét toàn bộ `app/`, lập danh sách tất cả các class cần test (`tests/.test-manifest.json`). +3. **Viết & Chạy Test Ngay (Auto-Healing)**: Sinh xong file test nào -> Tự chạy ngay `./test-runner.sh --filter=`. Nếu fail -> Tự đọc lỗi và sửa lại test ngay cho đến khi PASS 100%. +4. **Nghiệm Thu Toàn Dự Án**: Tự chạy `./test-runner.sh --coverage` và in bảng tổng kết độ phủ code. + +--- + +#### 🔹 Cách 2: Sinh Cho 1 Class & Chạy Test Ngay (`--run`) +Khi bạn chỉ muốn viết test cho 1 file và muốn AI test luôn file đó ngay lập tức: +```text +/laravel-unit-test app/Services/PaymentService.php --run ``` -🎯 **Cơ chế cam kết không sót file (Full Coverage Engine):** -1. **Lập Manifest Kiểm Soát**: AI tự động quét toàn bộ `app/` (và `Modules/`), lọc ra tất cả các class có logic (Services, Actions, FormRequests, Rules, Jobs, Policies, Middlewares, Listeners, Observers, Repositories). Lập file danh sách kiểm soát `tests/.test-manifest.json` (ví dụ: Tổng cộng 42 files). -2. **Thực Thi Tuần Tự & Lưu Tiến Độ**: Duyệt tuần tự từng class (`[1/42]`, `[2/42]`,...), sinh test tương ứng và đánh dấu `[COMPLETED]`. Tránh hoàn toàn việc tràn token/context và có thể chạy tiếp nếu bị gián đoạn. -3. **Tự Động Chạy Thử & Tự Sửa Lỗi (Auto-Healing)**: Mỗi khi sinh xong 1 file test, AI lập tức chạy `./test-runner.sh --filter=`. Nếu fail -> Tự sửa lại code test ngay cho đến khi pass 100%. -4. **Nghiệm Thu Toàn Dự Án**: Chạy `./test-runner.sh --coverage` và in bảng tổng kết: `42/42 files covered, 100% Passed, Code Coverage: > 80%`. --- @@ -278,8 +288,8 @@ sg-install-unit-testing.sh --force | **Cập nhật bộ công cụ (1-Click)**| `sg-test-update` | Kéo bản mới nhất từ Git về máy mọi lúc | | **Quét & Setup môi trường test** | `/laravel-test-setup` | Chạy trong Claude Code để kiểm tra cấu hình | | **Tự động cài gói composer thiếu**| `/laravel-test-setup --install` | Cài `mockery`, `faker`, `paratest` vào container | -| **Sinh test TOÀN BỘ dự án (1 lệnh)**| `/laravel-unit-test --all` | Tự động lập manifest, sinh tuần tự, cam kết không sót file | -| **Sinh test cho 1 file** | `/laravel-unit-test app/.../Service.php`| Khi đang code 1 class đơn lẻ | +| **Autopilot: Viết xong test luôn**| `/laravel-unit-test --all --run` | 1 lệnh tự setup, viết test cả dự án, chạy test & tự fix | +| **Sinh test cho 1 file & test luôn**| `/laravel-unit-test app/.../Service.php --run`| Sinh test cho 1 class và chạy test kiểm tra ngay | | **Sinh test cả thư mục** | `/laravel-unit-test app/Services/` | Khi cần phủ test cho cả 1 folder / module | | **Quét dự án lớn chưa có test** | `/laravel-unit-test --untested` | Tìm các class thiếu test để sinh hàng loạt | | **Sinh test cho Git Diff** | `/laravel-unit-test --changed` | Trước khi tạo Pull Request trên Git |