mirror of
https://github.com/alkimake/paperclip.git
synced 2026-06-14 18:10:39 +09:00
54 lines
1.6 KiB
TypeScript
54 lines
1.6 KiB
TypeScript
|
|
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");
|
||
|
|
});
|
||
|
|
});
|