🪆 Mock là gì?
Hàng giả đóng thế cho thứ thật khi test.
1
Hiểu nó là gì
Mock thay một thành phần thật như API hay database bằng bản giả trả về dữ liệu định sẵn, để test chạy nhanh và không phụ thuộc bên ngoài.
Nói theo đời thường:
Như ma-nơ-canh trong tiệm may: không phải người thật, nhưng đủ để thử áo vừa hay chật.
Như ma-nơ-canh trong tiệm may: không phải người thật, nhưng đủ để thử áo vừa hay chật.
⚠ Chỗ ẩn dụ này hỏng
Ma-nơ-canh chỉ đứng yên. Mock thì có trí nhớ: nó ghi lại đã bị gọi mấy lần, với tham số gì — và test thường kiểm tra đúng chuyện đó (“hàm gửi mail phải được gọi đúng một lần”). Đây chính là chỗ mock khác stub.
Nguy hiểm hơn: ma-nơ-canh mặc vừa không có nghĩa khách mặc vừa. API thật đổi định dạng mà mock của bạn vẫn trả dữ liệu cũ → test vẫn xanh trong khi sản phẩm đã hỏng. Càng mock nhiều, bộ test càng đẹp và càng ít nói lên sự thật.
2
Code trông thế nào
// Chặn lời gọi ra API thật, trả về dữ liệu mình tự đặt await page.route('**/api/ty-gia', route => route.fulfill({ json: { usd: 25000 } }) ) await page.goto('/bang-gia') await expect(page.getByTestId('gia-usd')).toHaveText('25.000')
Không có mạng nào bị gọi ra ngoài — trang tưởng mình vừa hỏi server thật.
3
Khi nào bạn dùng nó
✓ Dùng khi
- Thứ thật chậm, tốn tiền, hoặc có hạn mức gọi
- Cần dựng tình huống lỗi khó tạo thật (server trả 500, mạng timeout)
- Muốn test chạy được cả khi không có internet
✗ Đừng dùng khi
- Chính chỗ ghép nối đó là thứ bạn cần kiểm tra
- Ở tầng E2E — mock ở đây thì test còn lại gần như vô nghĩa
Chưa cần biết: phân biệt spy / fake / dummy, dependency injection, contract testing.
Để 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 API thật đã đổi định dạng mà bộ test của bạn vẫn xanh hết. Lúc đó mock đã lệch khỏi thực tế.
4
Đi đâu tiếp
- StubBản giả đơn giản hơn, không có trí nhớ — hiểu stub xong thì ranh giới rõ hẳn.
- Test DataDữ liệu nhét vào mock phải dựng lại được y hệt mỗi lần chạy.
- Flaky TestMock đặt sai chỗ là nguồn gây test chập chờn phổ biến.