feat: add comprehensive unit testing support for CakePHP

- Add 4 CakePHP Claude Code skills: cakephp-unit-test, cakephp-test-setup, cakephp-test-review, cakephp-mock-helper
- Add 11 CakePHP PHPUnit component templates (Table, Entity, Controller, Service, Command, Component, Middleware, Mailer, Form, Behavior, Helper)
- Add CakePHP configs (phpunit.xml.dist, app_local.test.php for SQLite in-memory)
- Add comprehensive CakePHP documentation and component guides
- Update test-runner.sh and installer to auto-detect Laravel and CakePHP
- Add CakePHP CI/CD templates for GitHub Actions and GitLab CI
- Update system prompt, verification checklist, and README with dedicated guides
This commit is contained in:
2026-09-14 10:19:40 +07:00
parent 0dce2ef812
commit 7425b263d5
28 changed files with 2210 additions and 356 deletions
+314 -213
View File
@@ -1,6 +1,6 @@
# 🚀 Laravel Unit Testing Toolkit for Claude Code
# 🚀 PHP Unit Testing Toolkit for Claude Code
> **Bộ công cụ tự động hóa toàn diện cho việc thiết lập môi trường, sinh Unit Test chuẩn AAA và kiểm thử tự động cho bất kỳ dự án PHP & Laravel nào (từ Laravel 8 đến 13+, PHP 8.0 đến 8.4+).**
> **Bộ công cụ tự động hóa toàn diện cho việc thiết lập môi trường, sinh Unit & Integration Test chuẩn AAA và kiểm thử tự động cho bất kỳ dự án PHP nào. Hỗ trợ chuyên sâu và tách biệt cho cả hai framework phổ biến: Laravel (8 đến 13+) và CakePHP (3.x đến 5.x+), tương thích PHP 7.4 đến 8.4+.**
Được phát triển dưới dạng mã nguồn mở (Open Source) dành cho mọi lập trình viên, đội ngũ kỹ thuật và cộng đồng phát triển phần mềm.
@@ -9,38 +9,35 @@
## 📑 MỤC LỤC
1. [Điểm Nổi Bật & Tính Năng Cốt Lõi](#1-điểm-nổi-bật--tính-năng-cốt-lõi)
2. [Cấu Trúc Thư Mục Repository](#2-cấu-trúc-thư-mục-repository)
3. [Hướng Dẫn Cài Đặt Lần Đầu](#3-hướng-dẫn-cài-đặt-lần-đầu)
4. [Khởi Tạo Cho Một Dự Án Laravel Bất Kỳ](#4-khởi-tạo-cho-một-dự-án-laravel-bất-kỳ)
5. [Quy Trình 5 Bước Sinh & Chạy Unit Test](#5-quy-trình-5-bước-sinh--chạy-unit-test)
- [Bước 1: Quét Môi Trường & Cài Packages (`/laravel-test-setup`)](#bước-1-quét-môi-trường--cài-packages-laravel-test-setup)
- [Bước 2: Sinh Unit Test Tự Động (`/laravel-unit-test`)](#bước-2-sinh-unit-test-tự-động-laravel-unit-test)
- [Bước 3: Chạy Test Thông Minh (`test-runner.sh`)](#bước-3-chạy-test-thông-minh-test-runnersh)
- [Bước 4: Thẩm Định & Chấm Điểm Test (`/laravel-test-review`)](#bước-4-thẩm-định--chấm-điểm-test-laravel-test-review)
- [Bước 5: Sinh Mã Giả Lập Nhanh (`/laravel-mock-helper`)](#bước-5-sinh-mã-giả-lập-nhanh-laravel-mock-helper)
6. [Cách Cập Nhật Bộ Công Cụ Khi Có Nâng Cấp](#6-cách-cập-nhật-bộ-công-cụ-khi-có-nâng-cấp)
7. [Giải Đáp Thắc Mắc & Xử Lý Lỗi (FAQ & Troubleshooting)](#7-giải-đáp-thắc-mắc--xử-lý-lỗi-faq--troubleshooting)
8. [Bảng Tra Cứu Toàn Bộ Lệnh (Full Cheat Sheet)](#8-bảng-tra-cứu-toàn-bộ-lệnh-full-cheat-sheet)
9. [Ma Trận Tương Thích & Bản Quyền](#9-ma-trận-tương-thích--bản-quyền)
3. [Cài Đặt Nhanh (1 Dòng Lệnh Duy Nhất)](#3-cài-đặt-nhanh-1-dòng-lệnh-duy-nhất)
4. [🔴 PHẦN 1: HƯỚNG DẪN DÀNH RIÊNG CHO LARAVEL](#4-phần-1-hướng-dẫn-dành-riêng-cho-laravel)
- [4.1. Kiến Trúc & 13 Tầng Hỗ Trợ](#41-kiến-trúc--13-tầng-hỗ-trợ-laravel)
- [4.2. Quy Trình Thực Chiến 5 Bước Cho Laravel](#42-quy-trình-thực-chiến-5-bước-cho-laravel)
- [4.3. Bảng Tra Cứu Lệnh Laravel (Cheat Sheet)](#43-bảng-tra-cứu-lệnh-laravel-cheat-sheet)
5. [🔵 PHẦN 2: HƯỚNG DẪN DÀNH RIÊNG CHO CAKEPHP](#5-phần-2-hướng-dẫn-dành-riêng-cho-cakephp)
- [5.1. Kiến Trúc & 10 Tầng Hỗ Trợ](#51-kiến-trúc--10-tầng-hỗ-trợ-cakephp)
- [5.2. Quy Trình Thực Chiến 5 Bước Cho CakePHP](#52-quy-trình-thực-chiến-5-bước-cho-cakephp)
- [5.3. Bảng Tra Cứu Lệnh CakePHP (Cheat Sheet)](#53-bảng-tra-cứu-lệnh-cakephp-cheat-sheet)
6. [Cập Nhật Bộ Công Cụ](#6-cập-nhật-bộ-công-cụ)
7. [Giải Đáp Thắc Mắc & Xử Lý Lỗi (FAQ)](#7-giải-đáp-thắc-mắc--xử-lý-lỗi-faq)
8. [Ma Trận Tương Thích & Bản Quyền](#8-ma-trận-tương-thích--bản-quyền)
---
## 1. Điểm Nổi Bật & Tính Năng Cốt Lõi
1. **Chuẩn Hóa Môi Trường Tự Động (Bước 0)**:
- Tự động nhận diện runtime: **Laravel Sail**, **Docker Compose** (service `app`/`php`), hoặc **PHP CLI cục bộ**.
- Bảo vệ an toàn database: thiết lập SQLite In-Memory (`:memory:`), tuyệt đối không chạm hay làm mất dữ liệu dev/local.
- Tự động nhận diện Framework (**Laravel** hay **CakePHP**) và runtime: **Docker Compose**, **Laravel Sail**, hoặc **PHP CLI cục bộ**.
- Bảo vệ an toàn database: thiết lập SQLite In-Memory (`:memory:`), tuyệt đối không chạm hay làm bẩn/mất dữ liệu dev/local.
- Tự động cài đặt các package còn thiếu (`mockery`, `faker`, `paratest`) thẳng vào đúng container đang chạy.
2. **Triết Lý Kiểm Thử Đỉnh Cao (AAA & Isolation)**:
- Đảm bảo tính cô lập tuyệt đối (Zero Leakage): mock toàn bộ external services, APIs, queues, mails.
- Không over-mocking: giữ nguyên thực thể DTO, Value Object, Collection thật.
- Chặn đứng lỗi anti-pattern mock chuỗi Eloquent Query Builder dễ vỡ.
3. **Bao Phủ Trọn Vẹn 13 Tầng Kiến Trúc Laravel**:
- Services, Actions, Controllers, FormRequests, Custom Rules, Repositories, Query Builders, Models, Jobs, Events, Listeners, Middlewares, Policies, Notifications, Mailables, Artisan Commands, View Components, Observers, Exceptions.
4. **Chế Độ Autopilot Khép Kín (`/laravel-unit-test --all --run`)**:
- Chỉ với 1 lệnh duy nhất: tự động lập manifest quét toàn bộ dự án, viết test tuần tự không sót file, **viết đến đâu tự chạy test đến đó**, và **tự động sửa lỗi (Auto-Healing)** cho đến khi PASS 100%.
5. **Sẵn Sàng Cho Tương Lai & Architecture Testing**:
- Đảm bảo tính cô lập tuyệt đối (Zero Leakage): mock toàn bộ external services, 3rd party APIs, queues, mails.
- Không over-mocking: giữ nguyên thực thể DTO, Value Object, Collection, Entity thật.
3. **Chế Độ Autopilot Khép Kín (`--all --run`)**:
- Tự động lập manifest quét toàn bộ dự án, viết test tuần tự không sót file, **viết đến đâu tự chạy test đến đó**, và **tự động sửa lỗi (Auto-Healing)** cho đến khi PASS 100%.
4. **Sẵn Sàng Cho Tương Lai & Architecture Testing**:
- Hỗ trợ đầy đủ tính năng mới nhất của **PHP 8.4+** (Property Hooks, Asymmetric Visibility).
- Tích hợp bộ kiểm thử kiến trúc toàn dự án **Architecture Test** bằng Pest v3 / PHPUnit (`arch()`).
- Tích hợp kiểm thử kiến trúc toàn dự án bằng Pest v3 / PHPUnit (`arch()`).
- Cung cấp sẵn file cấu hình CI/CD Quality Gate (GitHub Actions, GitLab CI) chặn merge PR nếu code coverage < 80%.
---
@@ -51,303 +48,407 @@
agent-unit-testing/
├── install.sh # Script cài đặt chính (hỗ trợ Toàn cục & Theo dự án)
├── .claude/
│ └── skills/ # Bộ 4 Skills tích hợp cho Claude Code
│ ├── laravel-test-setup/ # Kiểm tra môi trường & tự cài đặt dependencies
│ ├── laravel-unit-test/ # Sinh Unit Test tự động (hỗ trợ Autopilot --all --run)
│ ├── laravel-test-review/ # Chấm điểm chất lượng test theo thang 100 & bắt lỗi anti-patterns
│ └── skills/ # Bộ Skills tích hợp cho Claude Code
│ │── # Skills Dành Cho CakePHP:
│ ├── cakephp-unit-test/ # Sinh Test tự động cho CakePHP (Table, Controller, Service...)
│ ├── cakephp-test-setup/ # Quét môi trường & cấu hình Datasources.test cho CakePHP
│ ├── cakephp-test-review/ # Chấm điểm chất lượng test CakePHP theo thang 100
│ ├── cakephp-mock-helper/ # Sinh nhanh mã Mock PHPUnit/Mockery cho CakePHP
│ │── # Skills Dành Cho Laravel:
│ ├── laravel-test-setup/ # Kiểm tra môi trường & tự cài đặt dependencies cho Laravel
│ ├── laravel-unit-test/ # Sinh Unit Test tự động cho Laravel
│ ├── laravel-test-review/ # Chấm điểm chất lượng test Laravel
│ └── laravel-mock-helper/ # Sinh mã Mockery & Laravel Fakes nhanh
│
├── docs/ # 11 Cẩm Nang Kiến Thức & Quy Chuẩn Cốt Lõi
│ ├── 00-environment-and-setup.md # Hướng dẫn setup dependencies, SQLite in-memory & Docker
│ ├── 01-overview-and-principles.md # Triết lý Unit Test: AAA, cách ly, ranh giới Feature test
│ ├── 02-test-frameworks.md # So sánh & cú pháp PHPUnit 10/11 vs Pest PHP v2/v3
│ ├── 03-mocking-strategies.md # Toàn tập Mockery vs Laravel Fakes vs Static Facades
│ ├── 04-naming-and-structure.md # Quy chuẩn đặt tên file, namespace, test method
│ ├── 05-anti-patterns.md # 12 lỗi cấm kỵ khi viết Unit Test Laravel
│ ├── 06-future-php84-laravel-latest.md # Hướng dẫn chuyên sâu PHP 8.4+ & Laravel 12/13
│ ├── 07-troubleshooting-and-debugging.md # Cẩm nang sửa 10 lỗi thường gặp nhất khi chạy test
│ ├── 08-test-data-factories-and-builders.md# Quản lý fixture: Model::make(), States & DTO Builders
│ ├── 09-advanced-edge-cases.md # DB::transaction, Traits, File uploads, Serialization
│ ├── 10-sonarqube-100-percent-coverage-guide.md # Chiến lược đạt 100% Coverage trên SonarQube
│ │
│ └── components/ # 13 Cẩm Nang Chi Tiết Cho Từng Component Laravel
│ ├── 01-services-and-actions.md # Service Layer, Action classes, DTOs
│ ├── 02-controllers.md # API & Web Controllers
│ ├── 03-form-requests-and-rules.md # FormRequests & Custom Validation Rules
│ ├── 04-repositories-and-queries.md # Repositories & Custom Query Builders
│ ├── 05-models.md # Accessors, Mutators, Custom Casts
│ ├── 06-jobs-and-queues.md # Queueable Jobs, retry logic, failed()
│ ├── 07-events-and-listeners.md # Event payloads & Listener handlers
│ ├── 08-middlewares.md # Request interception, Auth, Role, Tenant
│ ├── 09-policies-and-gates.md # Policies authorization logic (can/cannot)
│ ├── 10-notifications-and-mail.md # Mailables & Notification channels
│ ├── 11-artisan-commands.md # Console arguments, options, exit codes
│ ├── 12-view-components-and-blade.md # Blade View Components & directives
│ └── 13-observers-and-exceptions.md # Model Observers & Custom Exceptions
├── docs/ # Cẩm Nang Kiến Thức & Quy Chuẩn Cốt Lõi
│ ├── cakephp/ # Cẩm nang chuyên sâu CakePHP (Testing Guide & 10 Components)
│ ├── components/ # Cẩm nang 13 tầng component Laravel
│ ├── 00-environment-and-setup.md # Setup dependencies, SQLite in-memory & Docker
│ ├── 01-overview-and-principles.md # Triết lý Unit Test: AAA, cách ly
│ ├── 02-test-frameworks.md # So sánh PHPUnit vs Pest PHP
│ ├── 03-mocking-strategies.md # Toàn tập Mockery vs Fakes
│ ├── 05-anti-patterns.md # 12 lỗi cấm kỵ khi viết Unit Test
│ └── 10-sonarqube-100-percent-coverage.md # Chiến lược đạt 100% Coverage trên SonarQube
│
├── templates/ # Templates Mẫu Chuẩn
│ ├── configs/ # phpunit.xml.dist, .env.testing, Pest.php
│ ├── docker/ # Smart test-runner.sh & docker-compose.test.yml
│ ├── ci/ # GitHub Actions & GitLab CI quality gates
│ ├── phpunit/ # 8 Component templates + ArchitectureTest
│ └── pest/ # 8 Component templates + ArchitectureTest
│ ├── cakephp/ # Templates PHPUnit & Config cho CakePHP
│ │ ├── phpunit/ # 10 Component templates (Table, Entity, Controller, Command...)
│ │ └── configs/ # phpunit.xml.dist & app_local.test.php (:memory:)
│ ├── phpunit/ # Templates PHPUnit cho Laravel (8 component templates)
│ ├── pest/ # Templates Pest PHP cho Laravel
│ └── docker/ # Smart test-runner.sh (tự nhận diện Laravel & CakePHP)
│
├── rules/ # Bộ Quy Tắc & Tiêu Chí Đánh Giá
│ ├── system-prompt-unit-test.md # System prompt cốt lõi cho AI
│ ├── edge-cases-matrix.md # Ma trận kịch bản biên (Null, Boundary, Errors)
│ └── verification-checklist.md # Checklist 10 bước tự kiểm tra trước khi xuất code
│
├── LICENSE # Giấy phép mã nguồn mở MIT
└── README.md # Tài liệu hướng dẫn chính
```
---
## 3. Cài Đặt Trực Tiếp Vào Source Code (Không Cần Clone Repo)
## 3. Cài Đặt Nhanh (1 Dòng Lệnh Duy Nhất)
Bất kỳ ai muốn sử dụng bộ công cụ này (dù trong hay ngoài team, trên bất kỳ máy tính nào) **KHÔNG CẦN phải clone repository công cụ về máy**.
Bất kỳ ai muốn sử dụng bộ công cụ này (trên máy cá nhân, server hay container) **KHÔNG CẦN phải clone repository về máy**.
Chỉ cần mở Terminal, `cd` vào thư mục dự án Laravel của bạn và chạy **đúng 1 dòng lệnh duy nhất**:
### 🌟 Cách 1: Cài trực tiếp vào Source Code của bạn (Khuyên dùng)
Mở Terminal, `cd` vào thư mục dự án của bạn (dù là **Laravel** hay **CakePHP**) và chạy:
```bash
cd /duong-dan/toi/source-code-laravel-cua-ban
cd /duong-dan/toi/source-code-cua-ban
# 🌟 Cài đặt trực tiếp qua HTTPS công khai (không cần tài khoản, không cần SSH key):
# Cài đặt trực tiếp qua HTTPS công khai (không cần SSH key, không cần tài khoản):
curl -fsSL https://git.smartgift.io.vn/Smartgift-AI/agent-unit-testing/raw/branch/main/install.sh | bash
```
*(Nếu thư mục đang trống hoặc chưa có file `composer.json`, thêm cờ `--force` vào cuối: `... | bash -s -- --force`)*.
*(Nếu thư mục đang trống hoặc chưa có `composer.json`, thêm cờ `--force` vào cuối: `... | bash -s -- --force`)*.
🎯 **Cơ chế tự động:**
- Script tự động phát hiện dự án là **Laravel** hay **CakePHP**.
- Tự động cấy bộ Skills tương ứng vào `.claude/skills/`.
- Tự động đồng bộ tài liệu vào `.claude/testing-docs/`.
- Tự động tạo Smart Runner `./test-runner.sh` (tự nhận diện runner và Docker).
- Tự động thiết lập kết nối SQLite In-Memory an toàn (không làm mất dữ liệu dev).
---
### 🎯 Quy Trình Tự Động Diễn Ra Ngầm:
1. Script sẽ tải các tài nguyên cần thiết từ xa qua HTTPS vào thư mục tạm `/tmp/`.
2. Tự động cấy trực tiếp vào source code của bạn:
- Thư mục `.claude/skills/` (với trọn bộ 4 Skills viết test tự động).
- Thư mục `.claude/testing-docs/` (cẩm nang quy chuẩn 13 tầng Laravel).
- Script chạy test thông minh `./test-runner.sh` (tự bắt Docker/Sail/Local).
- Script cài package test `./setup-test-deps.sh`.
- Tự động cấu hình SQLite In-Memory `:memory:` an toàn vào `phpunit.xml`.
- Tự động tạo GitHub Actions CI `.github/workflows/unit-tests.yml`.
3. Tự động xóa sạch thư mục tạm, **hoàn toàn không lưu lại rác hay repository công cụ trên máy của bạn**!
---
## 4. Tùy Chọn: Cài Đặt Toàn Cục Cho Toàn Máy Tính (Global Mode)
Nếu bạn muốn cài 1 lần duy nhất cho toàn bộ máy tính (để mọi source code mở Claude Code lên đều tự có sẵn các lệnh):
### ⚡ Cách 2: Cài Đặt Toàn Cục Cho Máy Tính (Global Mode)
Nếu muốn cài 1 lần duy nhất để dùng cho mọi dự án trên máy:
```bash
curl -fsSL https://git.smartgift.io.vn/Smartgift-AI/agent-unit-testing/raw/branch/main/install.sh | bash -s -- --global
```
🎯 **Lợi ích:**
- Tự động cài đặt 4 Skills vào `~/.claude/skills/`.
- Đăng ký lệnh `laravel-test-init` (hoặc `sg-test-init`) vào Terminal để gõ ở bất kỳ thư mục nào cũng tự tạo `test-runner.sh`.
🎯 **Lợi ích:**
- Tự động cài đặt 4 Skills vào `~/.claude/skills/`.
- Đăng ký lệnh `sg-test-init` (hoặc `laravel-test-init`) vào Terminal để gõ ở bất kỳ thư mục nào cũng tự tạo `test-runner.sh`.
- Đăng ký sẵn các lệnh tiện ích trong Terminal: `laravel-test-init`, `cakephp-test-init`, `sg-test-init`.
- Mọi thư mục khi mở Claude Code đều nhận diện sẵn trọn bộ skills của cả 2 framework.
---
## 5. Quy Trình Trọn Vẹn: Từ Bắt Đầu Đến Hoàn Thành Viết Unit Test
## 4. 🔴 PHẦN 1: HƯỚNG DẪN DÀNH RIÊNG CHO LARAVEL
Dưới đây là **kịch bản thực chiến trọn vẹn từ A đến Z** khi bạn áp dụng vào một source code Laravel thực tế:
### 4.1. Kiến Trúc & 13 Tầng Hỗ Trợ Laravel
Bộ công cụ sinh test chuẩn xác cho 13 tầng kiến trúc Laravel:
1. **Services & Actions** (`app/Services/`, `app/Actions/`)
2. **Controllers** (`app/Http/Controllers/`)
3. **Form Requests & Rules** (`app/Http/Requests/`, `app/Rules/`)
4. **Repositories & Query Builders** (`app/Repositories/`)
5. **Models** (`app/Models/` - Accessors, Mutators, Custom Casts)
6. **Jobs & Queues** (`app/Jobs/` - kiểm thử bắt buộc `handle()` và `failed()`)
7. **Events & Listeners** (`app/Events/`, `app/Listeners/`)
8. **Middlewares** (`app/Http/Middleware/`)
9. **Policies & Gates** (`app/Policies/`)
10. **Notifications & Mail** (`app/Notifications/`, `app/Mail/`)
11. **Artisan Commands** (`app/Console/Commands/`)
12. **View Components** (`app/View/Components/`)
13. **Observers & Exceptions** (`app/Observers/`, `app/Exceptions/`)
---
### 4.2. Quy Trình Thực Chiến 5 Bước Cho Laravel
```text
┌────────────────┐ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ 1. CÀI ĐẶT │ ──> │ 2. SETUP ENV │ ──> │ 3. AUTOPILOT │ ──> │ 4. NGHIỆM THU │
│ curl | bash │ │ test-setup │ │ unit-test --all│ │ Coverage > 80% │
│ 1. CÀI ĐẶT │ ──> │ 2. SETUP ENV │ ──> │ 3. SINH TEST │ ──> │ 4. CHẠY & REVIEW│
│ curl | bash │ │ laravel-setup │ │ laravel-test │ │ ./test-runner │
└────────────────┘ └────────────────┘ └────────────────┘ └────────────────┘
```
---
### 🔹 Giai đoạn 1: Cài đặt công cụ vào Source Code (Chỉ mất 5 giây)
Mở terminal, `cd` vào thư mục source code Laravel của bạn và chạy 1 dòng lệnh:
```bash
cd /duong-dan/toi/source-code-laravel
curl -fsSL https://raw.githubusercontent.com/<OWNER>/agent-unit-testing/main/install.sh | bash
```
✅ **Kết quả**: Source code đã được tích hợp bộ Skills, cẩm nang rules, script `./test-runner.sh` và cấu hình SQLite `:memory:` an toàn.
---
### 🔹 Giai đoạn 2: Khởi động Claude Code & Chuẩn hóa môi trường
Mở Claude Code ngay tại thư mục source code:
#### 🔹 Bước 1: Khởi động Claude Code & Setup môi trường
Đứng tại thư mục Laravel và gõ:
```bash
claude
```
Chạy lệnh kiểm tra và tự động cài đặt thư viện kiểm thử còn thiếu:
Chạy lệnh kiểm tra môi trường:
```text
/laravel-test-setup --install
```
✅ **Kết quả**: AI tự động kiểm tra `composer.json`, nếu thiếu `mockery`, `faker`, `paratest` -> AI tự động kích hoạt lệnh cài đặt vào container Docker hoặc môi trường Local của bạn và xác nhận môi trường chuyển sang trạng thái "Xanh" (100% Sẵn sàng).
AI sẽ tự động kiểm tra `composer.json`, thiết lập SQLite `:memory:` trong `phpunit.xml`, kiểm tra Sail / Docker và tự động cài `mockery`, `faker`, `paratest` nếu thiếu.
---
### 🔹 Giai đoạn 3: Viết Unit Test (Tách bạch pha Viết và pha Chạy)
#### 🔹 Bước 2: Sinh Unit Test Tự Động
Để đạt **hiệu suất cao nhất và độ phủ 100% nhánh SonarQube**, bạn nên áp dụng quy trình chuẩn Pro:
#### 🏆 Cách Khuyên Dùng (Cho Dự Án Lớn): Viết Tập Trung Theo Từng Tầng (Batch Mode)
Tránh việc vừa viết vừa chạy test làm AI bị phân tâm và tràn context. Hãy để AI dồn 100% tài nguyên viết sâu từng tầng:
##### 🏆 Cách Khuyên Dùng Cho Dự Án Lớn: Viết Tập Trung Theo Từng Tầng (Batch Mode)
Để tiết kiệm token và đạt độ phủ 100% từng nhánh SonarQube, hãy để AI viết sâu từng tầng:
```text
# 1. Viết toàn bộ tầng Services:
/laravel-unit-test app/Services/
# 2. Sau khi xong, viết tiếp tầng Actions & Requests:
# 2. Viết tiếp tầng Actions:
/laravel-unit-test app/Actions/
# 3. Viết tiếp FormRequests & Custom Rules:
/laravel-unit-test app/Http/Requests/
/laravel-unit-test app/Rules/
# 4. Viết tiếp Jobs, Listeners, Policies:
/laravel-unit-test app/Jobs/
/laravel-unit-test app/Policies/
```
*AI sẽ tạo trọn bộ các file test với đầy đủ kịch bản Happy Path, Edge Cases, Exception và Branch Coverage mà không bị gián đoạn.*
---
#### 🌟 Cách Thay Thế: Autopilot Khép Kín (Cho Dự Án Vừa & Nhỏ)
Nếu dự án có ít file (< 15 files) và bạn muốn AI tự động viết và chạy test thử nghiệm luôn:
##### 🌟 Cách Dành Cho Dự Án Vừa & Nhỏ: Autopilot Khép Kín
```text
/laravel-unit-test --all --run
```
AI sẽ tự lập manifest, viết đến đâu gọi `./test-runner.sh` đến đó và tự sửa lỗi nếu test fail.
AI tự động quét toàn bộ `app/`, viết test tuần tự, viết đến đâu tự gọi `./test-runner.sh` đến đó và tự sửa lỗi nếu test fail.
##### ⚡ Các chế độ sinh test khác:
- **Viết cho 1 file & test luôn**:
```text
/laravel-unit-test app/Services/PaymentService.php --run
```
- **Viết test cho các file vừa sửa đổi trên Git**:
```text
/laravel-unit-test --changed
```
- **Quét danh sách class thiếu test**:
```text
/laravel-unit-test --untested
```
---
### 🔹 Giai đoạn 4: Chạy Test Đồng Loạt Ngoài Terminal & Đo Độ Phủ SonarQube
Sau khi tất cả các file test đã được AI viết xong, bạn quay ra Terminal và chạy 1 lệnh duy nhất:
```bash
./test-runner.sh --coverage
```
*Tốc độ siêu nhanh vì chạy trên SQLite In-Memory. Nếu muốn xuất file báo cáo cho SonarQube:*
#### 🔹 Bước 3: Chạy Test Ngoài Terminal & Đo Độ Phủ SonarQube
Quay ra terminal và chạy:
```bash
# Chạy toàn bộ test:
./test-runner.sh
# Chạy 1 test cụ thể:
./test-runner.sh --filter=PaymentServiceTest
# Đo độ phủ code và xuất file cho SonarQube:
./test-runner.sh --coverage-clover coverage.xml
```
Bảng báo cáo nghiệm thu sẽ xuất hiện:
```markdown
🎉 HOÀN TẤT VIẾT VÀ TEST TOÀN BỘ DỰ ÁN:
✓ Tổng số class đã phủ test: 36/36 files (100%)
✓ Tổng số test cases được sinh: 142 test cases
✓ Kết quả thực thi: 142 PASSED (0 FAILED)
✓ Code Coverage: 95.8% (Đạt tiêu chuẩn Quality Gate SonarQube > 80%)
```
---
Nếu phát hiện 1 file test nào bị đỏ, bạn chỉ cần yêu cầu AI sửa đúng file đó:
#### 🔹 Bước 4: Thẩm Định & Chấm Điểm Test (Reviewer)
Nếu muốn kiểm tra xem 1 file test có đạt chuẩn AAA và không bị anti-pattern:
```text
/laravel-test-review tests/Unit/Services/PaymentServiceTest.php
```
---
### 🔹 Giai đoạn 5: Các chế độ chạy linh hoạt khác
- **Chỉ viết cho 1 class & test luôn**:
#### 🔹 Bước 5: Sinh Nhanh Mã Mock Cho Interface / Service
```text
/laravel-mock-helper App\Contracts\PaymentGatewayInterface
```
---
### 4.3. Bảng Tra Cứu Lệnh Laravel (Cheat Sheet)
| Nhiệm Vụ | Lệnh / Cú Pháp | Mô Tả |
| :--- | :--- | :--- |
| **Setup môi trường** | `/laravel-test-setup` | Kiểm tra cấu hình testing & database |
| **Cài packages thiếu** | `/laravel-test-setup --install` | Tự động cài `mockery`, `faker`, `paratest` |
| **Autopilot toàn dự án** | `/laravel-unit-test --all --run` | Quét toàn bộ `app/`, viết test & tự sửa lỗi |
| **Sinh test cả thư mục** | `/laravel-unit-test app/Services/` | Viết hàng loạt cho 1 folder |
| **Sinh test 1 file & chạy test** | `/laravel-unit-test app/.../File.php --run` | Viết cho 1 class và kiểm tra ngay |
| **Quét class thiếu test** | `/laravel-unit-test --untested` | Liệt kê các class chưa có file test |
| **Sinh test cho Git Diff** | `/laravel-unit-test --changed --run` | Viết test cho code vừa sửa trước khi tạo PR |
| **Chấm điểm file test** | `/laravel-test-review tests/.../Test.php` | Chấm điểm thang 100, bắt lỗi anti-patterns |
| **Sinh nhanh mã Mockery** | `/laravel-mock-helper MyInterface` | Tạo code mock sẵn dùng |
| **Chạy test terminal** | `./test-runner.sh` | Tự bắt Sail / Docker / Local PHP |
---
## 5. 🔵 PHẦN 2: HƯỚNG DẪN DÀNH RIÊNG CHO CAKEPHP
### 5.1. Kiến Trúc & 10 Tầng Hỗ Trợ CakePHP
Bộ công cụ hỗ trợ toàn diện các phiên bản **CakePHP 3.x, 4.x và 5.x+ (PHP 7.4 - 8.4+)**:
1. **Table Classes (ORM)** (`src/Model/Table/*Table.php`): Test validationDefault, buildRules, custom finders, save/delete với Fixtures.
2. **Entity Classes** (`src/Model/Entity/*.php`): Test password hashing, accessible fields, virtual fields (`_getFullName()`).
3. **Controller Classes** (`src/Controller/*Controller.php`): Dùng `Cake\TestSuite\IntegrationTestTrait`, test HTTP status (200/302/403/404/422), session, auth, CSRF & Security tokens.
4. **Domain Services** (`src/Service/*.php`): Test logic nghiệp vụ thuần túy với mocked dependencies.
5. **Console Commands** (`src/Command/*Command.php`): Dùng `Cake\Console\TestSuite\ConsoleIntegrationTestTrait`, test exit codes (`CODE_SUCCESS`), arguments, options, output.
6. **Controller Components** (`src/Controller/Component/*.php`): Test logic dùng chung của Controllers qua `ComponentRegistry`.
7. **Middlewares (PSR-15)** (`src/Middleware/*.php`): Test `ServerRequest` & `Response` flow.
8. **Mailers** (`src/Mailer/*Mailer.php`): Dùng `Cake\TestSuite\EmailTrait`, assert recipient, subject, template body.
9. **Forms** (`src/Form/*Form.php`): Test standalone forms (`validationDefault()`, `_execute()`).
10. **ORM Behaviors** (`src/Model/Behavior/*.php`): Test lifecycle hooks (`beforeSave`, `beforeFind`).
---
### 5.2. Quy Trình Thực Chiến 5 Bước Cho CakePHP
```text
┌────────────────┐ ┌────────────────┐ ┌────────────────┐ ┌────────────────┐
│ 1. CÀI ĐẶT │ ──> │ 2. SETUP ENV │ ──> │ 3. SINH TEST │ ──> │ 4. CHẠY & REVIEW│
│ curl | bash │ │ cakephp-setup │ │ cakephp-test │ │ ./test-runner │
└────────────────┘ └────────────────┘ └────────────────┘ └────────────────┘
```
#### 🔹 Bước 1: Khởi động Claude Code & Setup môi trường CakePHP
Đứng tại thư mục CakePHP và gõ:
```bash
claude
```
Chạy lệnh kiểm tra môi trường:
```text
/cakephp-test-setup --install
```
AI sẽ tự động:
- Kiểm tra phiên bản CakePHP (3.x / 4.x / 5.x) & PHP.
- Đảm bảo kết nối `Datasources.test` trong `config/app_local.php` hoặc `config/app.php` trỏ vào SQLite `:memory:` an toàn (tuyệt đối không đụng database dev thật).
- Kiểm tra testsuite `app` trong `phpunit.xml` và cài đặt packages cần thiết.
---
#### 🔹 Bước 2: Sinh Unit & Integration Test Cho CakePHP
##### 🏆 Cách Khuyên Dùng Cho Dự Án Lớn: Viết Tập Trung Theo Từng Tầng (Batch Mode)
```text
# 1. Viết tầng ORM Table (dùng Fixtures & fetchTable):
/cakephp-unit-test src/Model/Table/
# 2. Viết tầng Entities:
/cakephp-unit-test src/Model/Entity/
# 3. Viết tầng Domain Services:
/cakephp-unit-test src/Service/
# 4. Viết tầng Controllers (IntegrationTestTrait với CSRF/Auth):
/cakephp-unit-test src/Controller/
# 5. Viết tầng Console Commands (ConsoleIntegrationTestTrait):
/cakephp-unit-test src/Command/
# 6. Viết tiếp Components, Middlewares, Mailers:
/cakephp-unit-test src/Controller/Component/
/cakephp-unit-test src/Middleware/
/cakephp-unit-test src/Mailer/
```
##### 🌟 Cách Dành Cho Dự Án Vừa & Nhỏ: Autopilot Khép Kín
```text
/cakephp-unit-test --all --run
```
AI tự động quét toàn bộ `src/`, sinh test vào `tests/TestCase/` tương ứng, gọi `bin/cake test app` và tự fix lỗi cho đến khi toàn bộ test pass.
##### ⚡ Các chế độ sinh test CakePHP khác:
- **Viết cho 1 file & test luôn**:
```text
/laravel-unit-test app/Services/PaymentService.php --run
/cakephp-unit-test src/Model/Table/ArticlesTable.php --run
```
- **Chỉ viết cho các file vừa sửa đổi trên Git trước khi tạo PR**:
- **Viết test cho các file vừa sửa đổi trên Git**:
```text
/laravel-unit-test --changed
/cakephp-unit-test --changed
```
- **Quét danh sách class chưa có test theo độ ưu tiên**:
- **Quét danh sách class CakePHP thiếu test**:
```text
/laravel-unit-test --untested
```
- **Thẩm định & Chấm điểm 1 file test có sẵn (thang 100)**:
```text
/laravel-test-review tests/Unit/Services/PaymentServiceTest.php
```
- **Sinh nhanh khối mã Mockery cho một Interface**:
```text
/laravel-mock-helper App\Contracts\PaymentGatewayInterface
/cakephp-unit-test --untested
```
---
## 6. Cách Cập Nhật Bộ Công Cụ Khi Có Nâng Cấp
#### 🔹 Bước 3: Chạy Test Ngoài Terminal & Đo Độ Phủ
Quay ra terminal và chạy:
```bash
# Chạy toàn bộ test CakePHP (tự nhận diện Docker hoặc Local):
./test-runner.sh
Khi repository công cụ trên Git có tài liệu mới hoặc nâng cấp rules:
# Hoặc chạy trực tiếp qua CakePHP CLI:
bin/cake test app
# Chạy 1 test cụ thể:
./test-runner.sh --filter=ArticlesTableTest
# Đo độ phủ code SonarQube:
./test-runner.sh --coverage-clover coverage.xml
```
---
#### 🔹 Bước 4: Thẩm Định & Chấm Điểm Test CakePHP
Kiểm tra chất lượng và bắt các lỗi anti-patterns (quên CSRF token, tạo new Controller thủ công, truy vấn DB thật thay vì fixture):
```text
/cakephp-test-review tests/TestCase/Controller/ArticlesControllerTest.php
```
---
#### 🔹 Bước 5: Sinh Nhanh Mã Mock Cho CakePHP
Sinh nhanh mã PHPUnit Native Mock hoặc Mockery cho CakePHP Service hoặc Component:
```text
/cakephp-mock-helper App\Service\PaymentProcessingService
```
---
### 5.3. Bảng Tra Cứu Lệnh CakePHP (Cheat Sheet)
| Nhiệm Vụ | Lệnh / Cú Pháp | Mô Tả |
| :--- | :--- | :--- |
| **Setup môi trường** | `/cakephp-test-setup` | Kiểm tra Datasources.test & dependencies |
| **Cài packages thiếu** | `/cakephp-test-setup --install` | Cài đặt `phpunit`, `mockery`, `faker` |
| **Autopilot toàn dự án** | `/cakephp-unit-test --all --run` | Quét toàn bộ `src/`, sinh test & tự sửa lỗi |
| **Sinh test cả thư mục** | `/cakephp-unit-test src/Model/Table/` | Viết hàng loạt cho Table / Service / Controller |
| **Sinh test 1 file & chạy test** | `/cakephp-unit-test src/.../File.php --run` | Viết cho 1 class và chạy kiểm tra ngay |
| **Quét class thiếu test** | `/cakephp-unit-test --untested` | Liệt kê các class trong `src/` chưa có test |
| **Sinh test cho Git Diff** | `/cakephp-unit-test --changed --run` | Viết test cho code vừa thay đổi trên Git |
| **Chấm điểm file test** | `/cakephp-test-review tests/TestCase/...` | Chấm điểm thang 100, kiểm tra chuẩn CakePHP |
| **Sinh nhanh mã Mock** | `/cakephp-mock-helper MyService` | Tạo code mock PHPUnit / Mockery sẵn dùng |
| **Chạy test terminal** | `./test-runner.sh` | Tự bắt Docker (`bin/cake test app`) hoặc Local |
---
## 6. Cập Nhật Bộ Công Cụ
Khi repository công cụ trên Git có nâng cấp tài liệu hoặc bổ sung tính năng mới:
### 🌟 Cách 1: Cập nhật trực tiếp vào source code hiện tại
Đứng tại thư mục source code Laravel của bạn và chạy lại dòng lệnh cài đặt:
Đứng tại thư mục source code của bạn và chạy lại dòng lệnh cài đặt:
```bash
curl -fsSL https://git.smartgift.io.vn/Smartgift-AI/agent-unit-testing/raw/branch/main/install.sh | bash
```
*(Script sẽ tự động kéo bản mới nhất và ghi đè cập nhật vào `.claude/skills/` và runner của source code).*
### ⚡ Cách 2: Nếu đã cài đặt chế độ Toàn Cục (Global)
Gõ lệnh cập nhật ở bất kỳ đâu trong Terminal:
```bash
cakephp-test-update # Dành cho CakePHP
laravel-test-update # Dành cho Laravel
sg-test-update # Lệnh chung
```
---
### ⚡ Cách 2: Nếu bạn đã cài đặt chế độ Toàn Cục (Global)
Bất kể bạn đang đứng ở thư mục nào trong Terminal, chỉ cần gõ:
```bash
laravel-test-update
```
*(hoặc alias: `sg-test-update`)*
Lệnh sẽ tự động kéo bản cập nhật mới nhất từ Git về máy bạn trong 3 giây.
## 7. Giải Đáp Thắc Mắc & Xử Lý Lỗi (FAQ)
---
### Q1: Tại sao gõ `./install.sh` bị báo `zsh: no such file or directory`?
👉 **Trả lời**: Ký hiệu `./` tìm file trong thư mục hiện tại. Hãy dùng lệnh toàn cục: `laravel-test-init` hoặc `cakephp-test-init`.
## 7. Giải Đáp Thắc Mắc & Xử Lý Lỗi (FAQ & Troubleshooting)
### Q1: Tại sao tôi gõ `./install.sh` thì bị báo `zsh: no such file or directory`?
👉 **Trả lời**: Ký hiệu `./` nghĩa là tìm file ngay trong thư mục hiện tại. Khi bạn đã `cd` sang một dự án khác, thư mục đó không có file này.
**Cách sửa**: Bỏ dấu `./` đi, chỉ cần gõ thẳng tên lệnh toàn cục đã được đăng ký:
```bash
laravel-test-init
# Hoặc:
laravel-unit-test-setup
```
### Q2: Tôi cài đặt vào một thư mục trống nhưng bị báo chưa có `artisan` hoặc `composer.json`?
👉 **Trả lời**: Mặc định script sẽ kiểm tra để tránh cài nhầm vào thư mục không phải Laravel. Nếu bạn muốn cài đặt trước vào thư mục trống, hãy thêm cờ `--force`:
### Q2: Cài vào thư mục mới/trống có được không?
👉 **Trả lời**: Được! Thêm cờ `--force`:
```bash
install.sh --force
# Hoặc:
cakephp-test-init --force
laravel-test-init --force
```
### Q3: Chạy test trên SQLite `:memory:` bị lỗi hàm MySQL (`JSON_CONTAINS`, `DATE_FORMAT`)?
👉 **Trả lời**: Mở tài liệu `docs/07-troubleshooting-and-debugging.md` (mục 5) để xem cách đăng ký hàm giả lập trong `setUp()`, hoặc chuyển kết nối test sang một container MySQL test riêng.
### Q3: Chạy test có làm mất hoặc thay đổi dữ liệu database dev không?
👉 **Trả lời**: **Tuyệt đối không!**
- Với Laravel: Cấu hình `DB_CONNECTION=sqlite` và `DB_DATABASE=:memory:`.
- Với CakePHP: Cấu hình `Datasources.test` dùng SQLite `:memory:` hoặc Fixture Transaction Strategy tự động rollback dữ liệu sau mỗi test.
### Q4: Làm sao chặn merge Pull Request nếu Code Coverage dưới 80%?
👉 **Trả lời**: Bộ công cụ đã tạo sẵn file `.github/workflows/unit-tests.yml` (hoặc `.gitlab-ci.yml`). Pipeline CI sẽ tự động chạy song song trên PHP 8.2, 8.3, 8.4 và tự động từ chối merge nếu độ phủ < 80%.
👉 **Trả lời**: Bộ công cụ đã tạo sẵn file `.github/workflows/unit-tests.yml`. CI sẽ tự động chạy song song trên các phiên bản PHP và từ chối merge nếu độ phủ < 80%.
---
## 8. Bảng Tra Cứu Toàn Bộ Lệnh (Full Cheat Sheet)
| Nhiệm Vụ | Lệnh Terminal / Claude Code | Ngữ Cảnh Sử Dụng |
| :--- | :--- | :--- |
| **Cài đặt từ xa (Không cần clone)** | `curl -fsSL https://git.smartgift.io.vn/Smartgift-AI/agent-unit-testing/raw/branch/main/install.sh \| bash` | Đứng tại source code Laravel và chạy 1 dòng duy nhất |
| **Cài đặt toàn cục (Global Mode)** | `curl -fsSL https://git.smartgift.io.vn/Smartgift-AI/agent-unit-testing/raw/branch/main/install.sh \| bash -s -- --global` | Cài vào máy dùng cho mọi folder |
| **Cài đặt vào thư mục trống** | `curl -fsSL https://git.smartgift.io.vn/Smartgift-AI/agent-unit-testing/raw/branch/main/install.sh \| bash -s -- . --force` | Dùng khi thư mục chưa có `composer.json` |
| **Khởi tạo test runner nhanh** | `laravel-test-init` (hoặc `sg-test-init`) | Gõ tại terminal của bất kỳ dự án nào |
| **Cập nhật bộ công cụ (1-Click)** | `laravel-test-update` (hoặc `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 |
| **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/ --run` | 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 --run` | Trước khi tạo Pull Request trên Git |
| **Review chất lượng file test** | `/laravel-test-review tests/.../Test.php`| Chấm điểm thang 100 & bắt lỗi anti-patterns |
| **Sinh code Mockery nhanh** | `/laravel-mock-helper MyInterface` | Sinh code mock sẵn dùng |
| **Chạy test tự nhận diện** | `./test-runner.sh --filter=MyTest` | Tự bắt Docker / Sail / Local |
| **Tra cứu sửa lỗi** | Đọc `docs/07-troubleshooting-and-debugging.md` | Sửa 10 lỗi thường gặp nhất |
| **Tra cứu 7 ca khó** | Đọc `docs/09-advanced-edge-cases.md` | `DB::transaction()`, Trait, Upload file, Queue |
---
## 9. Ma Trận Tương Thích & Bản Quyền
## 8. Ma Trận Tương Thích & Bản Quyền
| Thành Phần | Phiên Bản Hỗ Trợ |
| :--- | :--- |
| **PHP** | 8.0, 8.1, 8.2, 8.3, **8.4+** (Property Hooks, Asymmetric Visibility) |
| **Laravel** | 8.x, 9.x, 10.x, 11.x, **12.x & 13.x (Kiến trúc hiện đại)** |
| **PHPUnit** | 9.x (DocBlock fallback), 10.x, **11.x & 12.x** (PHP 8 Attributes `#[Test]`) |
| **PHP** | 7.4, 8.0, 8.1, 8.2, 8.3, **8.4+** (Property Hooks, Asymmetric Visibility) |
| **CakePHP** | **3.x, 4.x, 5.x+ (Toàn bộ kiến trúc Table, Entity, Controller, Command, Mailer...)** |
| **Laravel** | **8.x, 9.x, 10.x, 11.x, 12.x & 13.x (Kiến trúc hiện đại)** |
| **PHPUnit** | 9.x (DocBlock), 10.x, **11.x & 12.x** (PHP 8 Attributes `#[Test]`) |
| **Pest PHP** | v2.x & **v3.x** (Architecture Testing `arch()`, Mutation testing) |
| **Mocking** | Mockery, PHPUnit Test Doubles, Laravel Built-in Fakes, `Concurrency::fake()`, `Context::fake()` |
| **Database** | SQLite In-Memory (`:memory:`), MySQL Test DB |
| **Mocking** | CakePHP Fixtures, PHPUnit Test Doubles, Mockery, Laravel Built-in Fakes |
| **Database** | SQLite In-Memory (`:memory:`), MySQL Test DB, PostgreSQL Test DB |
| **Hệ Điều Hành** | macOS, Linux, WSL2 (Windows), Docker, CI/CD Environments |
### Giấy Phép (License)