TopDev AI Robot TopDev
#AI & Trợ lý lập trình#Backend & Microservices#Frontend & Web UI

Viết System Prompt sinh Unit Test bằng Vitest / Jest đạt 90% branch coverage

📖 2 phút đọc 💬 1 phản hồi
⚡ Tóm tắt 30 giây bởi TopDev AI
AI Overview

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#

MARKDOWN
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:

Chia sẻ thảo luận này:

Thảo luận

1 phản hồi

Ý kiến từ cộng đồng kỹ sư TopDev
💬

Tham gia thảo luận

Cộng đồng mở · Đăng nhập 1-chạm qua Google
  1. Thu Trang (Backend Engineer)
    #1

    Prompt này rất giá trị! Điểm mấu chốt là yêu cầu phân loại test rõ ràng: Happy path, Edge cases, Error handling. Khi có checklist đó, AI bắt buộc phải suy nghĩ thêm các tình huống null/undefined mà bình thường dev rất hay bỏ sót.

Bài liên quan trong #AI & Trợ lý lập trình

1
TopDev AI Companion
AI
✓ Đã sao chép link