


























@@ -91,17 +91,25 @@ function createAgentRuntime(payloads: Array<Record<string, unknown>>) {
91919292function requireEmbeddedAgentArgs(runEmbeddedPiAgent: ReturnType<typeof vi.fn>) {
9393const calls = runEmbeddedPiAgent.mock.calls as unknown[][];
94-const firstCall = calls[0];
95-if (!firstCall) {
96-throw new Error("voice response generator did not invoke the embedded agent");
97-}
94+const firstCall = requireFirstMockCall(
95+ calls,
96+"voice response generator embedded agent invocation",
97+);
9898const args = firstCall[0] as Partial<EmbeddedAgentArgs> | undefined;
9999if (!args?.extraSystemPrompt) {
100100throw new Error("voice response generator did not pass the spoken-output contract prompt");
101101}
102102return args as EmbeddedAgentArgs;
103103}
104104105+function requireFirstMockCall(calls: readonly unknown[][], label: string): unknown[] {
106+const call = calls.at(0);
107+if (!call) {
108+throw new Error(`expected ${label} call`);
109+}
110+return call;
111+}
112+105113async function runGenerateVoiceResponse(
106114payloads: Array<Record<string, unknown>>,
107115overrides?: {
@@ -202,9 +210,12 @@ describe("generateVoiceResponse", () => {
202210expect(pinnedSessionEntry?.providerOverride).toBe("openai");
203211expect(pinnedSessionEntry?.modelOverride).toBe("gpt-4.1-nano");
204212expect(pinnedSessionEntry?.modelOverrideSource).toBe("auto");
205-const updateSessionStoreCall = updateSessionStore.mock.calls[0];
206-expect(updateSessionStoreCall?.[0]).toBe("/tmp/openclaw/main/sessions.json");
207-expect(updateSessionStoreCall?.[1]).toBeTypeOf("function");
213+const updateSessionStoreCall = requireFirstMockCall(
214+updateSessionStore.mock.calls,
215+"session store update",
216+);
217+expect(updateSessionStoreCall[0]).toBe("/tmp/openclaw/main/sessions.json");
218+expect(updateSessionStoreCall[1]).toBeTypeOf("function");
208219const args = requireEmbeddedAgentArgs(runEmbeddedPiAgent);
209220expect(args.provider).toBe("openai");
210221expect(args.model).toBe("gpt-4.1-nano");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。