























@@ -90,20 +90,27 @@ async function expectFetchRemoteMediaRejected(params: {
9090lookupFn?: LookupFn;
9191expectedError: RegExp | string | Record<string, unknown>;
9292}) {
93-const rejection = expect(
94-fetchRemoteMedia({
95-url: params.url,
96-fetchImpl: params.fetchImpl,
97-lookupFn: params.lookupFn ?? makeLookupFn(),
98-maxBytes: params.maxBytes ?? 1024,
99- ...(params.readIdleTimeoutMs ? { readIdleTimeoutMs: params.readIdleTimeoutMs } : {}),
100-}),
101-).rejects;
93+const request = {
94+url: params.url,
95+fetchImpl: params.fetchImpl,
96+lookupFn: params.lookupFn ?? makeLookupFn(),
97+maxBytes: params.maxBytes ?? 1024,
98+ ...(params.readIdleTimeoutMs ? { readIdleTimeoutMs: params.readIdleTimeoutMs } : {}),
99+};
102100if (params.expectedError instanceof RegExp || typeof params.expectedError === "string") {
103-await rejection.toThrow(params.expectedError);
101+await expect(fetchRemoteMedia(request)).rejects.toThrow(params.expectedError);
104102return;
105103}
106-await rejection.toMatchObject(params.expectedError);
104+let fetchError: unknown;
105+try {
106+await fetchRemoteMedia(request);
107+} catch (error) {
108+fetchError = error;
109+}
110+expect(fetchError).toBeInstanceOf(Error);
111+for (const [key, value] of Object.entries(params.expectedError)) {
112+expect((fetchError as Record<string, unknown>)[key]).toStrictEqual(value);
113+}
107114}
108115109116async function expectFetchRemoteMediaResolvesToError(
@@ -315,31 +322,35 @@ describe("fetchRemoteMedia", () => {
315322316323it("uses trusted explicit-proxy mode when the caller opts in for proxy-side DNS", async () => {
317324const fetchImpl = vi.fn(async () => new Response("ok", { status: 200 }));
325+const lookupFn = makeLookupFn();
326+const dispatcherPolicy = {
327+mode: "explicit-proxy" as const,
328+proxyUrl: "http://localhost:8888",
329+allowPrivateProxy: true,
330+};
318331319332await fetchRemoteMedia({
320333url: "https://files.example.test/file/bot123/photos/test.jpg",
321334 fetchImpl,
322-lookupFn: makeLookupFn(),
335+ lookupFn,
323336trustExplicitProxyDns: true,
324337dispatcherAttempts: [
325338{
326-dispatcherPolicy: {
327-mode: "explicit-proxy",
328-proxyUrl: "http://localhost:8888",
329-allowPrivateProxy: true,
330-},
339+ dispatcherPolicy,
331340},
332341],
333342});
334343335-expect(fetchWithSsrFGuardMock).toHaveBeenCalledWith(
336-expect.objectContaining({
337-mode: "trusted_explicit_proxy",
338-dispatcherPolicy: expect.objectContaining({
339-mode: "explicit-proxy",
340-proxyUrl: "http://localhost:8888",
341-}),
342-}),
343-);
344+expect(fetchWithSsrFGuardMock).toHaveBeenCalledTimes(1);
345+expect(fetchWithSsrFGuardMock.mock.calls[0]?.[0]).toStrictEqual({
346+url: "https://files.example.test/file/bot123/photos/test.jpg",
347+ fetchImpl,
348+init: undefined,
349+maxRedirects: undefined,
350+policy: undefined,
351+ lookupFn,
352+ dispatcherPolicy,
353+mode: "trusted_explicit_proxy",
354+});
344355});
345356});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。