





















@@ -53,37 +53,34 @@ describe("runway video generation provider", () => {
5353aspectRatio: "16:9",
5454});
555556-expect(postJsonRequestMock).toHaveBeenCalledWith(
57- expect.objectContaining({
58- url: "https://api.dev.runwayml.com/v1/text_to_video",
59- body: {
60- model: "gen4.5",
61- promptText: "a tiny lobster DJ under neon lights",
62- ratio: "1280:720",
63- duration: 4,
64- },
65-}),
66-);
67-expect(fetchWithTimeoutMock).toHaveBeenNthCalledWith(
68- 1,
69- "https://api.dev.runwayml.com/v1/tasks/task-1",
70- expect.objectContaining({ method: "GET" }),
71- 120000,
72- fetch,
73-);
56+expect(postJsonRequestMock).toHaveBeenCalledTimes(1);
57+const createRequest = postJsonRequestMock.mock.calls[0]?.[0] as
58+| { url?: string; body?: unknown }
59+| undefined;
60+expect(createRequest?.url).toBe("https://api.dev.runwayml.com/v1/text_to_video");
61+expect(createRequest?.body).toEqual({
62+model: "gen4.5",
63+promptText: "a tiny lobster DJ under neon lights",
64+ratio: "1280:720",
65+duration: 4,
66+});
67+const pollCall = fetchWithTimeoutMock.mock.calls[0];
68+expect(pollCall?.[0]).toBe("https://api.dev.runwayml.com/v1/tasks/task-1");
69+const pollInit = pollCall?.[1] as { method?: string; headers?: unknown } | undefined;
70+expect(pollInit?.method).toBe("GET");
71+expect(pollInit?.headers).toBeInstanceOf(Headers);
72+expect(pollCall?.[2]).toBe(120000);
73+expect(pollCall?.[3]).toBe(fetch);
7474expect(result.videos).toHaveLength(1);
7575const video = result.videos[0];
7676if (!video) {
7777throw new Error("expected Runway generated video");
7878}
7979expect(video.fileName).toBe("video-1.webm");
80-expect(result.metadata).toEqual(
81-expect.objectContaining({
82-taskId: "task-1",
83-status: "SUCCEEDED",
84-endpoint: "/v1/text_to_video",
85-}),
86-);
80+const metadata = result.metadata as Record<string, unknown>;
81+expect(metadata.taskId).toBe("task-1");
82+expect(metadata.status).toBe("SUCCEEDED");
83+expect(metadata.endpoint).toBe("/v1/text_to_video");
8784});
88858986it("accepts local image buffers by converting them into data URIs", async () => {
@@ -118,16 +115,14 @@ describe("runway video generation provider", () => {
118115durationSeconds: 6,
119116});
120117121-expect(postJsonRequestMock).toHaveBeenCalledWith(
122-expect.objectContaining({
123-url: "https://api.dev.runwayml.com/v1/image_to_video",
124-body: expect.objectContaining({
125-promptImage: expect.stringMatching(/^data:image\/png;base64,/u),
126-ratio: "960:960",
127-duration: 6,
128-}),
129-}),
130-);
118+expect(postJsonRequestMock).toHaveBeenCalledTimes(1);
119+const request = postJsonRequestMock.mock.calls[0]?.[0] as
120+| { url?: string; body?: Record<string, unknown> }
121+| undefined;
122+expect(request?.url).toBe("https://api.dev.runwayml.com/v1/image_to_video");
123+expect(request?.body?.promptImage).toMatch(/^data:image\/png;base64,/u);
124+expect(request?.body?.ratio).toBe("960:960");
125+expect(request?.body?.duration).toBe(6);
131126});
132127133128it("requires gen4_aleph for video-to-video", async () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。