

























@@ -2,37 +2,58 @@
2233import { beforeEach, describe, expect, it, vi } from "vitest";
445+const { realtimeTalkCtor, startMock, stopMock } = vi.hoisted(() => ({
6+realtimeTalkCtor: vi.fn(),
7+startMock: vi.fn(),
8+stopMock: vi.fn(),
9+}));
10+511describe("OpenClawApp Talk controls", () => {
612beforeEach(() => {
7-vi.restoreAllMocks();
13+vi.resetModules();
14+vi.doMock("./chat/realtime-talk.ts", () => ({
15+RealtimeTalkSession: realtimeTalkCtor,
16+}));
17+realtimeTalkCtor.mockReset();
18+startMock.mockReset();
19+stopMock.mockReset();
20+realtimeTalkCtor.mockImplementation(
21+function MockRealtimeTalkSession(this: { start: typeof startMock; stop: typeof stopMock }) {
22+this.start = startMock;
23+this.stop = stopMock;
24+},
25+);
26+startMock.mockResolvedValue(undefined);
827});
9281029it("retries Talk immediately when the previous session is already in error state", async () => {
11-await import("./app.ts");
12-const app = document.createElement("openclaw-app") as unknown as {
30+const { OpenClawApp } = await import("./app.ts");
31+const staleStop = vi.fn();
32+const app: {
1333client: unknown;
1434connected: boolean;
35+lastError: string | null;
1536realtimeTalkActive: boolean;
1637realtimeTalkStatus: string;
1738realtimeTalkSession: { stop(): void } | null;
1839sessionKey: string;
19-toggleRealtimeTalk(): Promise<void>;
40+} = {
41+client: { request: vi.fn() },
42+connected: true,
43+lastError: null,
44+realtimeTalkActive: true,
45+realtimeTalkStatus: "error",
46+realtimeTalkSession: { stop: staleStop },
47+sessionKey: "main",
2048};
21-const staleStop = vi.fn();
22-const request = vi.fn().mockRejectedValue(new Error("session unavailable"));
23-app.client = { request } as never;
24-app.connected = true;
25-app.sessionKey = "main";
26-app.realtimeTalkActive = true;
27-app.realtimeTalkStatus = "error";
28-app.realtimeTalkSession = { stop: staleStop };
294930-await app.toggleRealtimeTalk();
50+await OpenClawApp.prototype.toggleRealtimeTalk.call(app as never);
31513252expect(staleStop).toHaveBeenCalledOnce();
33-expect(request).toHaveBeenCalledOnce();
34-expect(request).toHaveBeenCalledWith("talk.realtime.session", { sessionKey: "main" });
35-expect(app.realtimeTalkStatus).toBe("error");
36-expect(app.realtimeTalkSession).toBeNull();
53+expect(realtimeTalkCtor).toHaveBeenCalledOnce();
54+expect(startMock).toHaveBeenCalledOnce();
55+expect(stopMock).not.toHaveBeenCalled();
56+expect(app.realtimeTalkStatus).toBe("connecting");
57+expect(app.realtimeTalkSession).not.toBeNull();
3758});
3859});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。