
























@@ -40,6 +40,14 @@ function mockMusicGenerationResponse(json: Record<string, unknown>): void {
4040});
4141}
424243+function mockCallArg(mock: { mock: { calls: unknown[][] } }, index = 0): Record<string, unknown> {
44+const call = mock.mock.calls[index];
45+if (!call) {
46+throw new Error(`expected mock call ${index}`);
47+}
48+return call[0] as Record<string, unknown>;
49+}
50+4351describe("minimax music generation provider", () => {
4452it("declares explicit mode capabilities", () => {
4553expectExplicitMusicGenerationCapabilities(buildMinimaxMusicGenerationProvider());
@@ -63,33 +71,24 @@ describe("minimax music generation provider", () => {
6371durationSeconds: 45,
6472});
657366-expect(postJsonRequestMock).toHaveBeenCalledWith(
67-expect.objectContaining({
68-url: "https://api.minimax.io/v1/music_generation",
69-body: expect.objectContaining({
70-model: "music-2.6",
71-lyrics: "our city wakes",
72-output_format: "url",
73-audio_setting: {
74-sample_rate: 44100,
75-bitrate: 256000,
76-format: "mp3",
77-},
78-}),
79-}),
80-);
81-const request = postJsonRequestMock.mock.calls[0]?.[0];
74+const request = mockCallArg(postJsonRequestMock);
75+expect(request.url).toBe("https://api.minimax.io/v1/music_generation");
76+const body = request.body as Record<string, unknown>;
77+expect(body.model).toBe("music-2.6");
78+expect(body.lyrics).toBe("our city wakes");
79+expect(body.output_format).toBe("url");
80+expect(body.audio_setting).toEqual({
81+sample_rate: 44100,
82+bitrate: 256000,
83+format: "mp3",
84+});
8285expect(request?.headers).toBeInstanceOf(Headers);
8386const headers = request?.headers as Headers | undefined;
8487expect(headers?.get("content-type")).toBe("application/json");
8588expect(result.tracks).toHaveLength(1);
8689expect(result.lyrics).toEqual(["our city wakes"]);
87-expect(result.metadata).toEqual(
88-expect.objectContaining({
89-taskId: "task-123",
90-audioUrl: "https://example.com/out.mp3",
91-}),
92-);
90+expect(result.metadata?.taskId).toBe("task-123");
91+expect(result.metadata?.audioUrl).toBe("https://example.com/out.mp3");
9392});
94939594it("downloads tracks when url output is returned in data.audio", async () => {
@@ -148,14 +147,10 @@ describe("minimax music generation provider", () => {
148147cfg: {},
149148});
150149151-expect(postJsonRequestMock).toHaveBeenCalledWith(
152-expect.objectContaining({
153-body: expect.objectContaining({
154-model: "music-2.6",
155-lyrics_optimizer: true,
156-}),
157-}),
158-);
150+const request = mockCallArg(postJsonRequestMock);
151+const body = request.body as Record<string, unknown>;
152+expect(body.model).toBe("music-2.6");
153+expect(body.lyrics_optimizer).toBe(true);
159154});
160155161156it("routes portal music generation through minimax-portal auth and HTTP config", async () => {
@@ -186,23 +181,14 @@ describe("minimax music generation provider", () => {
186181},
187182});
188183189-expect(resolveApiKeyForProviderMock).toHaveBeenCalledWith(
190-expect.objectContaining({
191-provider: "minimax-portal",
192-}),
193-);
194-expect(resolveProviderHttpRequestConfigMock).toHaveBeenCalledWith(
195-expect.objectContaining({
196-baseUrl: "https://api.minimaxi.com",
197-provider: "minimax-portal",
198-capability: "audio",
199-transport: "http",
200-}),
201-);
202-expect(postJsonRequestMock).toHaveBeenCalledWith(
203-expect.objectContaining({
204-url: "https://api.minimaxi.com/v1/music_generation",
205-}),
184+expect(mockCallArg(resolveApiKeyForProviderMock).provider).toBe("minimax-portal");
185+const httpConfigParams = mockCallArg(resolveProviderHttpRequestConfigMock);
186+expect(httpConfigParams.baseUrl).toBe("https://api.minimaxi.com");
187+expect(httpConfigParams.provider).toBe("minimax-portal");
188+expect(httpConfigParams.capability).toBe("audio");
189+expect(httpConfigParams.transport).toBe("http");
190+expect(mockCallArg(postJsonRequestMock).url).toBe(
191+"https://api.minimaxi.com/v1/music_generation",
206192);
207193});
208194});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。