Day 64 Mocking & Spies
Mocking means real implementations ki jagah fake ones use karna. Spies track karte hain ke function kab call hua, kitni baar, kya arguments ke saath. Real dependencies (DB, API, email) se tests isolate hote hain.
jest.fn() Mocks
Fake functions banao aur track karo.
// Mock function
const mockSendEmail = jest.fn();
mockSendEmail.mockReturnValue(true);
mockSendEmail.mockResolvedValue({ sent: true }); // async
// Use in test
mockSendEmail("user@test.com", "Welcome!");
expect(mockSendEmail).toHaveBeenCalledTimes(1);
expect(mockSendEmail).toHaveBeenCalledWith("user@test.com", "Welcome!");
expect(mockSendEmail).toHaveBeenLastCalledWith("user@test.com", "Welcome!");
// jest.spyOn — existing function spy karo
const consoleSpy = jest.spyOn(console, "log");
someFunction(); // jiske andar console.log hai
expect(consoleSpy).toHaveBeenCalled();
consoleSpy.mockRestore(); // original restore karo
Mock Modules
Entire modules mock karo.
// email.js module mock karo
jest.mock("./email", () => ({
sendEmail: jest.fn().mockResolvedValue({ id: "msg-123" }),
sendBulk: jest.fn().mockResolvedValue([])
}));
const { sendEmail } = require("./email");
test("user registration sends welcome email", async () => {
await registerUser({ name: "Ali", email: "ali@test.com" });
expect(sendEmail).toHaveBeenCalledWith(
"ali@test.com",
expect.stringContaining("Welcome")
);
});
🎯 Practice Challenge
Payment service ke saath registerUser test karo. Payment mock karo — success case aur failure case dono test karo.