IT nói tiếng người
Kiểm thửMốc 2 · Tự viết được cái đầu tiên

🪆 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.

⚠ 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

🧪 Thử 2 phút, không cần cài gì

Mở một trang web bất kỳ, F12 → Network. Chuột phải một request → Block request URL, tải lại trang. Bạn vừa làm phiên bản thô sơ nhất của mock: chặn thứ thật để xem trang xoay xở ra sao.

⚖ Hay bị nhầm với thuật ngữ khác

← Xem tất cả thuật ngữ