使用 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!"
});
});
});
我有以下健康检查功能
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!"
});
});
});