🔩 Stub là gì?
Bản giả tối giản, hỏi gì cũng trả đúng một câu.
1
Hiểu nó là gì
Stub là dạng giả đơn giản nhất: gọi vào thì trả về giá trị cố định, không quan tâm được gọi mấy lần hay với tham số nào.
Nói theo đời thường:
Như đoạn ghi âm sẵn ở tổng đài: hỏi gì cũng phát đúng một câu, nhưng thế là đủ để thử đường dây có thông không.
Như đoạn ghi âm sẵn ở tổng đài: hỏi gì cũng phát đúng một câu, nhưng thế là đủ để thử đường dây có thông không.
⚠ Chỗ ẩn dụ này hỏng
Đoạn ghi âm tổng đài phát mãi một câu — và đó chính là giới hạn thật của stub.
Nếu test của bạn cần biết “hàm đó có được gọi không, gọi mấy lần, với tham số gì” thì stub chịu, phải dùng mock. Nhưng nếu chỉ cần “có dữ liệu để chạy tiếp” thì stub đơn giản hơn nhiều và ít làm test dính chặt vào chi tiết cài đặt.
2
Code trông thế nào
// Stub: hỏi gì cũng trả đúng một câu const layTyGia = async () => 25000 // Mock: có trí nhớ, kiểm tra được const layTyGia = jest.fn(async () => 25000) expect(layTyGia).toHaveBeenCalledTimes(1)
Khác nhau đúng một chỗ: dòng cuối. Stub không kiểm tra được điều đó.
3
Khi nào bạn dùng nó
✓ Dùng khi
- Chỉ cần dữ liệu để chạy tiếp, không quan tâm nó bị gọi thế nào
- Muốn test đơn giản, ít dính vào chi tiết cài đặt
✗ Đừng dùng khi
- Cần kiểm tra hàm có được gọi đúng cách không (lúc đó dùng mock)
Chưa cần biết: fake (bản giả có logic thật thu nhỏ), in-memory database.
Để dành tới Mốc 3 — Tự sửa được khi nó hỏng: Test đỏ trên CI mà xanh ở máy bạn, và bạn biết bắt đầu tìm từ đâu.
Dấu hiệu bạn đã cần học nó: Khi stub của bạn bắt đầu phải có
if để trả về giá trị khác nhau tuỳ đầu vào.4
Đi đâu tiếp
- MockBản có trí nhớ — so hai cái là hiểu ngay ranh giới.
- Unit TestNơi stub được dùng nhiều nhất.
- Test DataGiá trị stub trả về nên lấy từ dữ liệu mẫu thật.
🧪 Thử 2 phút, không cần cài gì
F12 → Console:const layGio = () => '09:00'
layGio()
Bạn vừa viết một stub: một hàm luôn trả về đúng một giá trị, để phần code phía sau có cái mà chạy.