Spaces:
Build error
Build error
| import type { NextFunction, Request, Response } from "express"; | |
| import { describe, expect, it, vi } from "vitest"; | |
| import { HttpError } from "../errors.js"; | |
| import { errorHandler } from "../middleware/error-handler.js"; | |
| function makeReq(): Request { | |
| return { | |
| method: "GET", | |
| originalUrl: "/api/test", | |
| body: { a: 1 }, | |
| params: { id: "123" }, | |
| query: { q: "x" }, | |
| } as unknown as Request; | |
| } | |
| function makeRes(): Response { | |
| const res = { | |
| status: vi.fn(), | |
| json: vi.fn(), | |
| } as unknown as Response; | |
| (res.status as unknown as ReturnType<typeof vi.fn>).mockReturnValue(res); | |
| return res; | |
| } | |
| describe("errorHandler", () => { | |
| it("attaches the original Error to res.err for 500s", () => { | |
| const req = makeReq(); | |
| const res = makeRes() as any; | |
| const next = vi.fn() as unknown as NextFunction; | |
| const err = new Error("boom"); | |
| errorHandler(err, req, res, next); | |
| expect(res.status).toHaveBeenCalledWith(500); | |
| expect(res.json).toHaveBeenCalledWith({ error: "Internal server error" }); | |
| expect(res.err).toBe(err); | |
| expect(res.__errorContext?.error?.message).toBe("boom"); | |
| }); | |
| it("attaches HttpError instances for 500 responses", () => { | |
| const req = makeReq(); | |
| const res = makeRes() as any; | |
| const next = vi.fn() as unknown as NextFunction; | |
| const err = new HttpError(500, "db exploded"); | |
| errorHandler(err, req, res, next); | |
| expect(res.status).toHaveBeenCalledWith(500); | |
| expect(res.json).toHaveBeenCalledWith({ error: "db exploded" }); | |
| expect(res.err).toBe(err); | |
| expect(res.__errorContext?.error?.message).toBe("db exploded"); | |
| }); | |
| }); | |