
























@@ -29,6 +29,12 @@ vi.mock("./chrome-mcp.runtime.js", () => ({
2929const { createBrowserRouteContext } = await import("./server-context.js");
3030const chromeMcp = chromeMcpMock;
313132+type ChromeLiveProfile = {
33+driver?: string;
34+name?: string;
35+userDataDir?: string;
36+};
37+3238function makeState(): BrowserServerState {
3339return {
3440server: null,
@@ -74,14 +80,6 @@ function makeState(): BrowserServerState {
7480};
7581}
768277-function expectChromeLiveProfile() {
78-return expect.objectContaining({
79-name: "chrome-live",
80-driver: "existing-session",
81-userDataDir: "/tmp/brave-profile",
82-});
83-}
84-8583beforeEach(() => {
8684for (const key of [
8785"ALL_PROXY",
@@ -111,27 +109,32 @@ describe("browser server-context existing-session profile", () => {
111109vi.mocked(chromeMcp.listChromeMcpTabs).mockRejectedValueOnce(new Error("No page selected"));
112110113111const profiles = await ctx.listProfiles();
114-expect(profiles).toEqual([
115-expect.objectContaining({
116-name: "chrome-live",
117-transport: "chrome-mcp",
118-running: true,
119-tabCount: 0,
120-}),
121-]);
122-123-expect(chromeMcp.ensureChromeMcpAvailable).toHaveBeenCalledWith(
124-"chrome-live",
125-expectChromeLiveProfile(),
126-{ ephemeral: true, timeoutMs: 300 },
127-);
128-expect(chromeMcp.listChromeMcpTabs).toHaveBeenCalledWith(
129-"chrome-live",
130-expectChromeLiveProfile(),
131-{
132-ephemeral: true,
133-},
134-);
112+expect(profiles).toHaveLength(1);
113+expect(profiles[0]?.name).toBe("chrome-live");
114+expect(profiles[0]?.transport).toBe("chrome-mcp");
115+expect(profiles[0]?.running).toBe(true);
116+expect(profiles[0]?.tabCount).toBe(0);
117+118+const [, ensuredProfile, ensureOptions] =
119+(
120+vi.mocked(chromeMcp.ensureChromeMcpAvailable).mock.calls as unknown as Array<
121+[string, ChromeLiveProfile, { ephemeral?: boolean; timeoutMs?: number }]
122+>
123+)[0] ?? [];
124+expect(ensuredProfile?.name).toBe("chrome-live");
125+expect(ensuredProfile?.driver).toBe("existing-session");
126+expect(ensuredProfile?.userDataDir).toBe("/tmp/brave-profile");
127+expect(ensureOptions).toEqual({ ephemeral: true, timeoutMs: 300 });
128+const [, listedProfile, listOptions] =
129+(
130+vi.mocked(chromeMcp.listChromeMcpTabs).mock.calls as unknown as Array<
131+[string, ChromeLiveProfile, { ephemeral?: boolean }]
132+>
133+)[0] ?? [];
134+expect(listedProfile?.name).toBe("chrome-live");
135+expect(listedProfile?.driver).toBe("existing-session");
136+expect(listedProfile?.userDataDir).toBe("/tmp/brave-profile");
137+expect(listOptions).toEqual({ ephemeral: true });
135138});
136139137140it("keeps the next real attach on the normal sticky session path after an idle status probe", async () => {
@@ -142,34 +145,36 @@ describe("browser server-context existing-session profile", () => {
142145143146vi.mocked(chromeMcp.listChromeMcpTabs).mockRejectedValueOnce(new Error("No page selected"));
144147145-await expect(ctx.listProfiles()).resolves.toEqual([
146-expect.objectContaining({
147-name: "chrome-live",
148-running: true,
149-tabCount: 0,
150-}),
151-]);
148+const profiles = await ctx.listProfiles();
149+expect(profiles).toHaveLength(1);
150+expect(profiles[0]?.name).toBe("chrome-live");
151+expect(profiles[0]?.running).toBe(true);
152+expect(profiles[0]?.tabCount).toBe(0);
152153153154vi.mocked(chromeMcp.listChromeMcpTabs).mockClear();
154155155156await live.ensureBrowserAvailable();
156157const tabs = await live.listTabs();
157158158159expect(tabs.map((tab) => tab.targetId)).toEqual(["7"]);
159-expect(chromeMcp.ensureChromeMcpAvailable).toHaveBeenLastCalledWith(
160-"chrome-live",
161-expectChromeLiveProfile(),
162-);
163-expect(chromeMcp.listChromeMcpTabs).toHaveBeenNthCalledWith(
164-1,
165-"chrome-live",
166-expectChromeLiveProfile(),
167-);
168-expect(chromeMcp.listChromeMcpTabs).toHaveBeenNthCalledWith(
169-2,
170-"chrome-live",
171-expectChromeLiveProfile(),
172-);
160+const ensureCalls = vi.mocked(chromeMcp.ensureChromeMcpAvailable).mock
161+.calls as unknown as Array<[string, ChromeLiveProfile]>;
162+const lastEnsureCall = ensureCalls.at(-1);
163+expect(lastEnsureCall?.[0]).toBe("chrome-live");
164+expect(lastEnsureCall?.[1]?.name).toBe("chrome-live");
165+expect(lastEnsureCall?.[1]?.driver).toBe("existing-session");
166+expect(lastEnsureCall?.[1]?.userDataDir).toBe("/tmp/brave-profile");
167+const listCalls = vi.mocked(chromeMcp.listChromeMcpTabs).mock.calls as unknown as Array<
168+[string, ChromeLiveProfile]
169+>;
170+expect(listCalls[0]?.[0]).toBe("chrome-live");
171+expect(listCalls[0]?.[1]?.name).toBe("chrome-live");
172+expect(listCalls[0]?.[1]?.driver).toBe("existing-session");
173+expect(listCalls[0]?.[1]?.userDataDir).toBe("/tmp/brave-profile");
174+expect(listCalls[1]?.[0]).toBe("chrome-live");
175+expect(listCalls[1]?.[1]?.name).toBe("chrome-live");
176+expect(listCalls[1]?.[1]?.driver).toBe("existing-session");
177+expect(listCalls[1]?.[1]?.userDataDir).toBe("/tmp/brave-profile");
173178});
174179175180it("routes tab operations through the Chrome MCP backend", async () => {
@@ -211,24 +216,31 @@ describe("browser server-context existing-session profile", () => {
211216await live.focusTab("7");
212217await live.stopRunningBrowser();
213218214-expect(chromeMcp.ensureChromeMcpAvailable).toHaveBeenCalledWith(
215-"chrome-live",
216-expectChromeLiveProfile(),
217-);
218-expect(chromeMcp.listChromeMcpTabs).toHaveBeenCalledWith(
219-"chrome-live",
220-expectChromeLiveProfile(),
221-);
222-expect(chromeMcp.openChromeMcpTab).toHaveBeenCalledWith(
223-"chrome-live",
224-"about:blank",
225-expectChromeLiveProfile(),
226-);
227-expect(chromeMcp.focusChromeMcpTab).toHaveBeenCalledWith(
228-"chrome-live",
229-"7",
230-expectChromeLiveProfile(),
231-);
219+const [ensureCall] = vi.mocked(chromeMcp.ensureChromeMcpAvailable).mock
220+.calls as unknown as Array<[string, ChromeLiveProfile]>;
221+expect(ensureCall?.[0]).toBe("chrome-live");
222+expect(ensureCall?.[1]?.name).toBe("chrome-live");
223+expect(ensureCall?.[1]?.driver).toBe("existing-session");
224+const [listCall] = vi.mocked(chromeMcp.listChromeMcpTabs).mock.calls as unknown as Array<
225+[string, ChromeLiveProfile]
226+>;
227+expect(listCall?.[0]).toBe("chrome-live");
228+expect(listCall?.[1]?.name).toBe("chrome-live");
229+expect(listCall?.[1]?.driver).toBe("existing-session");
230+const [openCall] = vi.mocked(chromeMcp.openChromeMcpTab).mock.calls as unknown as Array<
231+[string, string, ChromeLiveProfile]
232+>;
233+expect(openCall?.[0]).toBe("chrome-live");
234+expect(openCall?.[1]).toBe("about:blank");
235+expect(openCall?.[2]?.name).toBe("chrome-live");
236+expect(openCall?.[2]?.driver).toBe("existing-session");
237+const [focusCall] = vi.mocked(chromeMcp.focusChromeMcpTab).mock.calls as unknown as Array<
238+[string, string, ChromeLiveProfile]
239+>;
240+expect(focusCall?.[0]).toBe("chrome-live");
241+expect(focusCall?.[1]).toBe("7");
242+expect(focusCall?.[2]?.name).toBe("chrome-live");
243+expect(focusCall?.[2]?.driver).toBe("existing-session");
232244expect(chromeMcp.closeChromeMcpSession).toHaveBeenCalledWith("chrome-live");
233245});
234246此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。