























@@ -73,6 +73,15 @@ function requireFirstRequestHeaders(mock: ReturnType<typeof vi.fn>): Headers {
7373return headers;
7474}
757576+function requireFirstCallArg(mock: ReturnType<typeof vi.fn>): unknown {
77+const call = (mock.mock.calls as unknown as Array<[unknown] | undefined>)[0];
78+const arg = call?.[0];
79+if (!arg) {
80+throw new Error("expected mock call argument");
81+}
82+return arg;
83+}
84+7685function createProvider(overrides: Partial<OpenAiCompatibleImageProviderOptions> = {}) {
7786return createOpenAiCompatibleImageGenerationProvider({
7887id: "sample",
@@ -179,33 +188,36 @@ describe("OpenAI-compatible image provider helper", () => {
179188},
180189} as never);
181190182-expect(resolveApiKeyForProviderMock).toHaveBeenCalledWith(
183-expect.objectContaining({ provider: "sample" }),
184-);
191+const apiKeyParams = requireFirstCallArg(resolveApiKeyForProviderMock) as { provider?: string };
192+expect(apiKeyParams.provider).toBe("sample");
185193expect(sanitizeConfiguredModelProviderRequestMock).toHaveBeenCalledWith({
186194allowPrivateNetwork: true,
187195});
188-expect(postJsonRequestMock).toHaveBeenCalledWith(
189-expect.objectContaining({
190-url: "https://sample.example/v1/images/generations",
191-allowPrivateNetwork: true,
192-ssrfPolicy: { allowRfc2544BenchmarkRange: true },
193-dispatcherPolicy: { request: { allowPrivateNetwork: true } },
194-body: {
195-model: "custom-image",
196-prompt: "draw a square",
197-n: 2,
198-size: "512x512",
199-response_format: "b64_json",
200-},
201-}),
202-);
203-const headers = requireFirstRequestHeaders(postJsonRequestMock);
204-expect(headers.get("Content-Type")).toBe("application/json");
205-expect(result).toMatchObject({
196+const jsonRequest = requireFirstCallArg(postJsonRequestMock) as {
197+url?: string;
198+allowPrivateNetwork?: boolean;
199+ssrfPolicy?: unknown;
200+dispatcherPolicy?: unknown;
201+body?: unknown;
202+};
203+expect(jsonRequest.url).toBe("https://sample.example/v1/images/generations");
204+expect(jsonRequest.allowPrivateNetwork).toBe(true);
205+expect(jsonRequest.ssrfPolicy).toEqual({ allowRfc2544BenchmarkRange: true });
206+expect(jsonRequest.dispatcherPolicy).toEqual({ request: { allowPrivateNetwork: true } });
207+expect(jsonRequest.body).toEqual({
206208model: "custom-image",
207-images: [{ mimeType: "image/png", fileName: "image-1.png", revisedPrompt: "revised" }],
209+prompt: "draw a square",
210+n: 2,
211+size: "512x512",
212+response_format: "b64_json",
208213});
214+const headers = requireFirstRequestHeaders(postJsonRequestMock);
215+expect(headers.get("Content-Type")).toBe("application/json");
216+expect(result.model).toBe("custom-image");
217+expect(result.images).toHaveLength(1);
218+expect(result.images[0]?.mimeType).toBe("image/png");
219+expect(result.images[0]?.fileName).toBe("image-1.png");
220+expect(result.images[0]?.revisedPrompt).toBe("revised");
209221expect(release).toHaveBeenCalledOnce();
210222});
211223@@ -221,12 +233,12 @@ describe("OpenAI-compatible image provider helper", () => {
221233cfg: {} as never,
222234});
223235224-expect(postMultipartRequestMock).toHaveBeenCalledWith(
225-expect.objectContaining({
226- url: "https://sample.example/v1/images/edits",
227- body: expect.any(FormData),
228- }),
229-);
236+const multipartRequest = requireFirstCallArg(postMultipartRequestMock) as {
237+url?: string;
238+body?: unknown;
239+};
240+expect(multipartRequest.url).toBe("https://sample.example/v1/images/edits");
241+expect(multipartRequest.body).toBeInstanceOf(FormData);
230242const headers = requireFirstRequestHeaders(postMultipartRequestMock);
231243expect(headers.has("Content-Type")).toBe(false);
232244});
@@ -259,8 +271,7 @@ describe("OpenAI-compatible image provider helper", () => {
259271deadline: { timeoutMs: 123, label: "Sample image generation" },
260272defaultTimeoutMs: 60_000,
261273});
262-expect(postJsonRequestMock).toHaveBeenCalledWith(
263-expect.objectContaining({ timeoutMs: 60_000 }),
264-);
274+const timeoutRequest = requireFirstCallArg(postJsonRequestMock) as { timeoutMs?: number };
275+expect(timeoutRequest.timeoutMs).toBe(60_000);
265276});
266277});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。