

























@@ -15,6 +15,24 @@ const { fetchWithSsrFGuardMock } = vi.hoisted(() => ({
1515fetchWithSsrFGuardMock: vi.fn(),
1616}));
171718+type FetchGuardRequest = {
19+url?: unknown;
20+auditContext?: unknown;
21+init?: {
22+method?: unknown;
23+headers?: HeadersInit;
24+body?: BodyInit | null;
25+};
26+};
27+28+function fetchRequest(call: number): FetchGuardRequest {
29+const request = fetchWithSsrFGuardMock.mock.calls[call - 1]?.[0] as FetchGuardRequest | undefined;
30+if (!request) {
31+throw new Error(`expected Comfy fetch call ${call}`);
32+}
33+return request;
34+}
35+1836function parseJsonBody(call: number): Record<string, unknown> {
1937return parseComfyJsonBody(fetchWithSsrFGuardMock, call);
2038}
@@ -146,33 +164,23 @@ describe("comfy image-generation provider", () => {
146164}),
147165});
148166149-expect(fetchWithSsrFGuardMock).toHaveBeenNthCalledWith(
150-1,
151-expect.objectContaining({
152-url: "http://127.0.0.1:8188/prompt",
153-auditContext: "comfy-image-generate",
154-}),
155-);
167+const submitRequest = fetchRequest(1);
168+expect(submitRequest.url).toBe("http://127.0.0.1:8188/prompt");
169+expect(submitRequest.auditContext).toBe("comfy-image-generate");
156170expect(parseJsonBody(1)).toEqual({
157171prompt: {
158172"6": { inputs: { text: "draw a lobster" } },
159173"9": { inputs: {} },
160174},
161175});
162-expect(fetchWithSsrFGuardMock).toHaveBeenNthCalledWith(
163-2,
164-expect.objectContaining({
165-url: "http://127.0.0.1:8188/history/local-prompt-1",
166-auditContext: "comfy-history",
167-}),
168-);
169-expect(fetchWithSsrFGuardMock).toHaveBeenNthCalledWith(
170-3,
171-expect.objectContaining({
172-url: "http://127.0.0.1:8188/view?filename=generated.png&subfolder=&type=output",
173-auditContext: "comfy-image-download",
174-}),
176+const historyRequest = fetchRequest(2);
177+expect(historyRequest.url).toBe("http://127.0.0.1:8188/history/local-prompt-1");
178+expect(historyRequest.auditContext).toBe("comfy-history");
179+const downloadRequest = fetchRequest(3);
180+expect(downloadRequest.url).toBe(
181+"http://127.0.0.1:8188/view?filename=generated.png&subfolder=&type=output",
175182);
183+expect(downloadRequest.auditContext).toBe("comfy-image-download");
176184expect(result).toEqual({
177185images: [
178186{
@@ -260,14 +268,16 @@ describe("comfy image-generation provider", () => {
260268],
261269});
262270263-const uploadRequest = fetchWithSsrFGuardMock.mock.calls[0]?.[0];
271+const uploadRequest = fetchRequest(1);
264272expect(uploadRequest?.url).toBe("http://127.0.0.1:8188/upload/image");
265273expect(uploadRequest?.auditContext).toBe("comfy-image-upload");
266274expect(uploadRequest?.init?.method).toBe("POST");
267275const uploadForm = uploadRequest?.init?.body;
268-expect(uploadForm).toBeInstanceOf(FormData);
269-expect(uploadForm?.get("type")).toBe("input");
270-expect(uploadForm?.get("overwrite")).toBe("true");
276+if (!(uploadForm instanceof FormData)) {
277+throw new Error("expected Comfy upload request body to be FormData");
278+}
279+expect(uploadForm.get("type")).toBe("input");
280+expect(uploadForm.get("overwrite")).toBe("true");
271281272282expect(parseJsonBody(2)).toEqual({
273283prompt: {
@@ -306,7 +316,7 @@ describe("comfy image-generation provider", () => {
306316}),
307317});
308318309-const submitRequest = fetchWithSsrFGuardMock.mock.calls[0]?.[0];
319+const submitRequest = fetchRequest(1);
310320expect(submitRequest?.url).toBe("https://cloud.comfy.org/api/prompt");
311321expect(submitRequest?.auditContext).toBe("comfy-image-generate");
312322const submitHeaders = new Headers(submitRequest?.init?.headers);
@@ -321,34 +331,20 @@ describe("comfy image-generation provider", () => {
321331},
322332});
323333324-expect(fetchWithSsrFGuardMock).toHaveBeenNthCalledWith(
325-2,
326-expect.objectContaining({
327-url: "https://cloud.comfy.org/api/job/cloud-job-1/status",
328-auditContext: "comfy-status",
329-}),
330-);
331-expect(fetchWithSsrFGuardMock).toHaveBeenNthCalledWith(
332-3,
333-expect.objectContaining({
334-url: "https://cloud.comfy.org/api/history_v2/cloud-job-1",
335-auditContext: "comfy-history",
336-}),
337-);
338-expect(fetchWithSsrFGuardMock).toHaveBeenNthCalledWith(
339-4,
340-expect.objectContaining({
341-url: "https://cloud.comfy.org/api/view?filename=cloud.png&subfolder=&type=output",
342-auditContext: "comfy-image-download",
343-}),
344-);
345-expect(fetchWithSsrFGuardMock).toHaveBeenNthCalledWith(
346-5,
347-expect.objectContaining({
348-url: "https://cdn.example.com/cloud.png",
349-auditContext: "comfy-image-download",
350-}),
334+const statusRequest = fetchRequest(2);
335+expect(statusRequest.url).toBe("https://cloud.comfy.org/api/job/cloud-job-1/status");
336+expect(statusRequest.auditContext).toBe("comfy-status");
337+const historyRequest = fetchRequest(3);
338+expect(historyRequest.url).toBe("https://cloud.comfy.org/api/history_v2/cloud-job-1");
339+expect(historyRequest.auditContext).toBe("comfy-history");
340+const viewRequest = fetchRequest(4);
341+expect(viewRequest.url).toBe(
342+"https://cloud.comfy.org/api/view?filename=cloud.png&subfolder=&type=output",
351343);
344+expect(viewRequest.auditContext).toBe("comfy-image-download");
345+const cdnRequest = fetchRequest(5);
346+expect(cdnRequest.url).toBe("https://cdn.example.com/cloud.png");
347+expect(cdnRequest.auditContext).toBe("comfy-image-download");
352348expect(result.metadata).toEqual({
353349promptId: "cloud-job-1",
354350outputNodeIds: ["9"],
@@ -384,14 +380,12 @@ describe("comfy image-generation provider", () => {
384380}),
385381});
386382387-const submitRequest = fetchWithSsrFGuardMock.mock.calls[0]?.[0];
383+const submitRequest = fetchRequest(1);
388384const submitHeaders = new Headers(submitRequest?.init?.headers);
389385expect(submitHeaders.get("x-api-key")).toBe("comfy-secret-ref-key");
390-expect(parseJsonBody(1)).toMatchObject({
391-extra_data: {
392-api_key_comfy_org: "comfy-secret-ref-key",
393-},
394-});
386+const requestBody = parseJsonBody(1);
387+const extraData = requestBody.extra_data as { api_key_comfy_org?: unknown } | undefined;
388+expect(extraData?.api_key_comfy_org).toBe("comfy-secret-ref-key");
395389});
396390397391it("uses provider auth fallback for cloud workflows without plugin config API keys", async () => {
@@ -423,13 +417,11 @@ describe("comfy image-generation provider", () => {
423417}),
424418});
425419426-const submitRequest = fetchWithSsrFGuardMock.mock.calls[0]?.[0];
420+const submitRequest = fetchRequest(1);
427421const submitHeaders = new Headers(submitRequest?.init?.headers);
428422expect(submitHeaders.get("x-api-key")).toBe("profile-key");
429-expect(parseJsonBody(1)).toMatchObject({
430-extra_data: {
431-api_key_comfy_org: "profile-key",
432-},
433-});
423+const requestBody = parseJsonBody(1);
424+const extraData = requestBody.extra_data as { api_key_comfy_org?: unknown } | undefined;
425+expect(extraData?.api_key_comfy_org).toBe("profile-key");
434426});
435427});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。