Viết System Prompt sinh Unit Test bằng Vitest / Jest đạt 90% branch coverage
Tại sao AI thường sinh Unit Test rất hời hợt? Hầu hết lập trình viên khi nhờ AI viết Unit Test chỉ gõ một prompt đơn giản: "Viết unit test cho hàm này giúp tôi". Kết quả trả về thường là: - Chỉ test …
☰ Mục lục bài viết (4 phần) Mở / Đóng mục lục
Tại sao AI thường sinh Unit Test rất hời hợt?#
Hầu hết lập trình viên khi nhờ AI viết Unit Test chỉ gõ một prompt đơn giản: "Viết unit test cho hàm này giúp tôi". Kết quả trả về thường là:
- Chỉ test các case vui (Happy path).
- Bỏ qua các trường hợp biên (Edge cases như
null,undefined, mảng rỗng, chuỗi quá dài). - Mocking sai thư viện hoặc không assert được lỗi khi ném exception.
Để đạt được branch coverage trên 90% đạt chuẩn production, bạn cần một System Prompt chuyên sâu hướng dẫn AI tư duy theo phương pháp Boundary Value Analysis.
Mẫu System Prompt chuẩn cho Vitest & Jest#
Bạn là chuyên gia QA Automation và Test-Driven Development (TDD) hàng đầu.
Nhiệm vụ của bạn là viết bộ Unit Test toàn diện bằng Vitest (hoặc Jest) cho đoạn mã được cung cấp.
Quy tắc bắt buộc khi viết test:
1. Coverage Target: Đạt tối thiểu 90% Branch Coverage và Line Coverage.
2. Cấu trúc Test Suite:
- Sử dụng cú pháp `describe()` lồng nhau theo từng method/function.
- Mỗi test case đặt tên rõ ràng theo pattern: "should [hành vi mong muốn] when [điều kiện kích hoạt]".
3. Phân loại Test Cases bắt buộc:
a. Happy Path: Kiểm tra dữ liệu đầu vào chuẩn.
b. Edge Cases: Giá trị biên (0, số âm, số cực lớn, chuỗi rỗng, khoảng trắng, mảng rỗng).
c. Error Handling: Kiểm tra throw custom Error, kiểm tra rejection của Promise.
d. Concurrency/Timeout: Kiểm tra khi API bị delay hoặc timeout.
4. Mocking:
- Mock tất cả các external dependencies (DB queries, HTTP requests, File system) bằng `vi.mock()` hoặc `vi.fn()`.
- Luôn `beforeEach(() => vi.clearAllMocks())` để tránh rò rỉ state giữa các test case.
Thử nghiệm thực tế với một hàm xử lý thanh toán#
Khi áp dụng prompt này cho hàm tính toán chiết khấu voucher, AI không chỉ viết test cho voucher hợp lệ mà còn tự động sinh ra 8 test case khác nhau:
- Voucher hết hạn sử dụng.
- Voucher vượt quá số tiền đơn hàng.
- User áp dụng mã voucher của người khác.
- Đơn vị tiền tệ bị sai định dạng.
Góc thảo luận#
Anh em có thói quen dùng AI để viết test trước (TDD) hay viết code xong mới bảo AI viết test bổ sung? Quy định độ phủ test ở công ty anh em là bao nhiêu phần trăm?
Xem thêm nội dung liên quan:
Thảo luận
1 phản hồi
Tham gia thảo luận
Bài liên quan trong #AI & Trợ lý lập trình
-
Lập trình viên có bị thay thế bởi AI không? 5 kỹ năng bắt buộc phải nâng cấp trong 2 năm tới
Hoàng Nam (Tech Lead) · 💬 1 -
Áp dụng Model Context Protocol (MCP) của Anthropic để kết nối AI với Postgres và Docker
Hoàng Nam (Tech Lead) · 💬 1 -
So sánh mô hình Embedding đa ngữ: OpenAI text-embedding-3 vs BGE-M3 vs Cohere
Minh Trí (AI Engineer) · 💬 1 -
Xây dựng Voice AI Agent thời gian thực với WebRTC và Whisper Live: Độ trễ dưới 500ms
Lan Anh (Senior Frontend) · 💬 1 -
Cấu hình Rate Limiting ở tầng Nginx và API Gateway: Chống DDOS Layer 7 hiệu quả
Đức Huy (DevOps Specialist) · 💬 1