



























@@ -19,6 +19,14 @@ vi.mock("openclaw/plugin-sdk/provider-http", () => ({
1919resolveProviderHttpRequestConfig: resolveProviderHttpRequestConfigMock,
2020}));
212122+function requireFirstMockArg(mock: ReturnType<typeof vi.fn>): Record<string, unknown> {
23+const arg = mock.mock.calls[0]?.[0] as Record<string, unknown> | undefined;
24+if (!arg) {
25+throw new Error("missing first mock argument");
26+}
27+return arg;
28+}
29+2230describe("createOpenAiCompatibleSpeechProvider", () => {
2331afterEach(() => {
2432assertOkOrThrowHttpErrorMock.mockClear();
@@ -122,34 +130,29 @@ describe("createOpenAiCompatibleSpeechProvider", () => {
122130timeoutMs: 1234,
123131});
124132125-expect(resolveProviderHttpRequestConfigMock).toHaveBeenCalledWith(
126-expect.objectContaining({
127-baseUrl: "https://example.test/v1",
128-defaultBaseUrl: "https://example.test/v1",
129-provider: "demo",
130-capability: "audio",
131-}),
132-);
133-expect(postJsonRequestMock).toHaveBeenCalledWith(
134-expect.objectContaining({
135-url: "https://example.test/v1/audio/speech",
136-timeoutMs: 1234,
137-body: {
138-model: "override-tts",
139-input: "hello",
140-voice: "verse",
141-response_format: "opus",
142-speed: 1.1,
143-provider: { order: ["openai"] },
144-},
145-}),
146-);
147-expect(result).toMatchObject({
148-audioBuffer: Buffer.from([4, 5, 6]),
149-outputFormat: "opus",
150-fileExtension: ".opus",
151-voiceCompatible: true,
133+expect(resolveProviderHttpRequestConfigMock).toHaveBeenCalledOnce();
134+const httpConfigRequest = requireFirstMockArg(resolveProviderHttpRequestConfigMock);
135+expect(httpConfigRequest.baseUrl).toBe("https://example.test/v1");
136+expect(httpConfigRequest.defaultBaseUrl).toBe("https://example.test/v1");
137+expect(httpConfigRequest.provider).toBe("demo");
138+expect(httpConfigRequest.capability).toBe("audio");
139+140+expect(postJsonRequestMock).toHaveBeenCalledOnce();
141+const postRequest = requireFirstMockArg(postJsonRequestMock);
142+expect(postRequest.url).toBe("https://example.test/v1/audio/speech");
143+expect(postRequest.timeoutMs).toBe(1234);
144+expect(postRequest.body).toStrictEqual({
145+model: "override-tts",
146+input: "hello",
147+voice: "verse",
148+response_format: "opus",
149+speed: 1.1,
150+provider: { order: ["openai"] },
152151});
152+expect(result.audioBuffer).toStrictEqual(Buffer.from([4, 5, 6]));
153+expect(result.outputFormat).toBe("opus");
154+expect(result.fileExtension).toBe(".opus");
155+expect(result.voiceCompatible).toBe(true);
153156expect(release).toHaveBeenCalledOnce();
154157});
155158});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。