使用 Jest 在 Next.js 中测试 API 路由处理函数

Test API route handler function in Next.js using Jest

我有以下健康检查功能

export default function handler(req, res) {
  res.status(200).json({ message: "Hello from Next.js!" });
}

我有以下测试

import handler from "./healthcheck"

describe("Healthcheck", () => {
  test("that the application is live with a status of 200", () => {
    const mockFn = jest.fn({
      status: jest.fn(),
      json: jest.fn()
    });

    expect(mockFn).toHaveBeenCalledWith();
    expect(mockFn.status).toBe(200);
  });
});

我想检查该函数是否正在被调用,状态是否为 200,我知道我需要模拟该函数,但是,如何通过请求和响应正确地模拟这样的函数。

handler 函数接受一个 res 参数,您可以在测试期间模拟并传递给 handler 调用。然后您可以验证是否已正确调用模拟。

import handler from "./healthcheck"

describe("Healthcheck", () => {
    test("that the application is live with a status of 200", () => {
        const resMock = { status: jest.fn() }; // Mocks `res`
        const resStatusMock = { json: jest.fn() }; // Mock `res.status`
        resMock.status.mockReturnValue(resStatusMock); // Makes `res.status` return `resStatusMock`
        
        handler(undefined, resMock);

        expect(resMock.status).toHaveBeenCalledWith(200);
        expect(resStatusMock.json).toHaveBeenCalledWith({
            message: "Hello from Next.js!"
        });
    });
});