


























@@ -4,7 +4,8 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
44import { createMockServerResponse } from "../test-utils/mock-http-response.js";
55import {
66installRequestBodyLimitGuard,
7-isRequestBodyLimitError,
7+RequestBodyLimitError,
8+type RequestBodyLimitErrorCode,
89readJsonBodyWithLimit,
910readRequestBodyWithLimit,
1011} from "./http-body.js";
@@ -19,6 +20,37 @@ async function waitForMicrotaskTurn(): Promise<void> {
1920await new Promise<void>((resolve) => queueMicrotask(resolve));
2021}
212223+async function expectRequestBodyLimitError(
24+promise: Promise<unknown>,
25+expected: {
26+code: RequestBodyLimitErrorCode;
27+message: string;
28+statusCode: number;
29+},
30+) {
31+try {
32+await promise;
33+} catch (error) {
34+expect(error).toBeInstanceOf(RequestBodyLimitError);
35+if (!(error instanceof RequestBodyLimitError)) {
36+throw error;
37+}
38+expect({
39+name: error.name,
40+message: error.message,
41+code: error.code,
42+statusCode: error.statusCode,
43+}).toEqual({
44+name: "RequestBodyLimitError",
45+message: expected.message,
46+code: expected.code,
47+statusCode: expected.statusCode,
48+});
49+return;
50+}
51+throw new Error("Expected request body reader to reject");
52+}
53+2254async function expectReadPayloadTooLarge(params: {
2355chunks?: string[];
2456headers?: Record<string, string>;
@@ -29,8 +61,10 @@ async function expectReadPayloadTooLarge(params: {
2961headers: params.headers,
3062emitEnd: false,
3163});
32-await expect(readRequestBodyWithLimit(req, { maxBytes: params.maxBytes })).rejects.toMatchObject({
64+await expectRequestBodyLimitError(readRequestBodyWithLimit(req, { maxBytes: params.maxBytes }), {
65+code: "PAYLOAD_TOO_LARGE",
3366message: "PayloadTooLarge",
67+statusCode: 413,
3468});
3569await waitForMicrotaskTurn();
3670expect(req.__unhandledDestroyError).toBeUndefined();
@@ -212,9 +246,11 @@ describe("http body limits", () => {
212246it("timeout surfaces typed error when timeoutMs is clamped", async () => {
213247const req = createMockRequest({ emitEnd: false });
214248const promise = readRequestBodyWithLimit(req, { maxBytes: 128, timeoutMs: 0 });
215-await expect(promise).rejects.toSatisfy((error: unknown) =>
216-isRequestBodyLimitError(error, "REQUEST_BODY_TIMEOUT"),
217-);
249+await expectRequestBodyLimitError(promise, {
250+code: "REQUEST_BODY_TIMEOUT",
251+message: "RequestBodyTimeout",
252+statusCode: 408,
253+});
218254expect(req.__unhandledDestroyError).toBeUndefined();
219255});
220256@@ -231,8 +267,10 @@ describe("http body limits", () => {
231267const req = createMockRequest({ emitEnd: false });
232268const promise = readRequestBodyWithLimit(req, { maxBytes: 128 });
233269queueMicrotask(() => req.emit("close"));
234-await expect(promise).rejects.toSatisfy((error: unknown) =>
235-isRequestBodyLimitError(error, "CONNECTION_CLOSED"),
236-);
270+await expectRequestBodyLimitError(promise, {
271+code: "CONNECTION_CLOSED",
272+message: "RequestBodyConnectionClosed",
273+statusCode: 400,
274+});
237275});
238276});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。