




















@@ -106,6 +106,25 @@ function getActPostHandler() {
106106return handler;
107107}
108108109+function requireRecord(value: unknown, label: string): Record<string, unknown> {
110+expect(value, label).toBeTypeOf("object");
111+expect(value, label).not.toBeNull();
112+return value as Record<string, unknown>;
113+}
114+115+function callArg(mock: unknown, callIndex: number, argIndex: number, label: string) {
116+const calls = (mock as { mock?: { calls?: Array<Array<unknown>> } }).mock?.calls ?? [];
117+const call = calls.at(callIndex);
118+expect(call, label).toBeDefined();
119+return call?.[argIndex];
120+}
121+122+function expectExistingSessionProfile(value: unknown) {
123+const profile = requireRecord(value, "profile");
124+expect(profile.name).toBe("chrome-live");
125+expect(profile.driver).toBe("existing-session");
126+}
127+109128describe("existing-session browser routes", () => {
110129beforeEach(() => {
111130routeState.profileCtx.ensureTabAvailable.mockClear();
@@ -131,18 +150,19 @@ describe("existing-session browser routes", () => {
131150await handler?.({ params: {}, query: { format: "ai", labels: "1" } }, response.res);
132151133152expect(response.statusCode).toBe(200);
134-expect(response.body).toMatchObject({
135-ok: true,
136-format: "ai",
137-labels: true,
138-labelsCount: 1,
139-labelsSkipped: 0,
140-});
141-expect(chromeMcpMocks.takeChromeMcpSnapshot).toHaveBeenCalledWith({
142-profileName: "chrome-live",
143-profile: expect.objectContaining({ name: "chrome-live", driver: "existing-session" }),
144-targetId: "7",
145-});
153+const body = requireRecord(response.body, "response body");
154+expect(body.ok).toBe(true);
155+expect(body.format).toBe("ai");
156+expect(body.labels).toBe(true);
157+expect(body.labelsCount).toBe(1);
158+expect(body.labelsSkipped).toBe(0);
159+const snapshotParams = requireRecord(
160+callArg(chromeMcpMocks.takeChromeMcpSnapshot, 0, 0, "snapshot params"),
161+"snapshot params",
162+);
163+expect(snapshotParams.profileName).toBe("chrome-live");
164+expectExistingSessionProfile(snapshotParams.profile);
165+expect(snapshotParams.targetId).toBe("7");
146166expect(navigationGuardMocks.assertBrowserNavigationResultAllowed).not.toHaveBeenCalled();
147167expect(chromeMcpMocks.takeChromeMcpScreenshot).toHaveBeenCalled();
148168});
@@ -160,20 +180,21 @@ describe("existing-session browser routes", () => {
160180);
161181162182expect(response.statusCode).toBe(200);
163-expect(response.body).toMatchObject({
164-ok: true,
165-path: "/tmp/fake.png",
166-targetId: "7",
167-});
168-expect(chromeMcpMocks.takeChromeMcpScreenshot).toHaveBeenCalledWith({
169-profileName: "chrome-live",
170-profile: expect.objectContaining({ name: "chrome-live", driver: "existing-session" }),
171-targetId: "7",
172-uid: "btn-1",
173-fullPage: false,
174-format: "jpeg",
175-timeoutMs: 4321,
176-});
183+const body = requireRecord(response.body, "response body");
184+expect(body.ok).toBe(true);
185+expect(body.path).toBe("/tmp/fake.png");
186+expect(body.targetId).toBe("7");
187+const screenshotParams = requireRecord(
188+callArg(chromeMcpMocks.takeChromeMcpScreenshot, 0, 0, "screenshot params"),
189+"screenshot params",
190+);
191+expect(screenshotParams.profileName).toBe("chrome-live");
192+expectExistingSessionProfile(screenshotParams.profile);
193+expect(screenshotParams.targetId).toBe("7");
194+expect(screenshotParams.uid).toBe("btn-1");
195+expect(screenshotParams.fullPage).toBe(false);
196+expect(screenshotParams.format).toBe("jpeg");
197+expect(screenshotParams.timeoutMs).toBe(4321);
177198expect(navigationGuardMocks.assertBrowserNavigationResultAllowed).not.toHaveBeenCalled();
178199});
179200@@ -221,9 +242,8 @@ describe("existing-session browser routes", () => {
221242);
222243223244expect(response.statusCode).toBe(400);
224-expect(response.body).toMatchObject({
225-error: expect.stringContaining("element screenshots are not supported"),
226-});
245+const body = requireRecord(response.body, "response body");
246+expect(String(body.error)).toContain("element screenshots are not supported");
227247expect(chromeMcpMocks.takeChromeMcpScreenshot).not.toHaveBeenCalled();
228248});
229249@@ -240,9 +260,8 @@ describe("existing-session browser routes", () => {
240260);
241261242262expect(response.statusCode).toBe(501);
243-expect(response.body).toMatchObject({
244-error: expect.stringContaining("loadState=networkidle"),
245-});
263+const body = requireRecord(response.body, "response body");
264+expect(String(body.error)).toContain("loadState=networkidle");
246265expect(chromeMcpMocks.evaluateChromeMcpScript).not.toHaveBeenCalled();
247266});
248267@@ -259,9 +278,8 @@ describe("existing-session browser routes", () => {
259278);
260279261280expect(response.statusCode).toBe(501);
262-expect(response.body).toMatchObject({
263-error: expect.stringContaining("type does not support timeoutMs"),
264-});
281+const body = requireRecord(response.body, "response body");
282+expect(String(body.error)).toContain("type does not support timeoutMs");
265283expect(chromeMcpMocks.fillChromeMcpElement).not.toHaveBeenCalled();
266284});
267285@@ -284,14 +302,18 @@ describe("existing-session browser routes", () => {
284302);
285303286304expect(response.statusCode).toBe(200);
287-expect(response.body).toMatchObject({ ok: true, targetId: "7" });
288-expect(chromeMcpMocks.evaluateChromeMcpScript).toHaveBeenCalledWith({
289-profileName: "chrome-live",
290-profile: expect.objectContaining({ name: "chrome-live", driver: "existing-session" }),
291-userDataDir: undefined,
292-targetId: "7",
293-fn: "() => window.location.href",
294-});
305+const body = requireRecord(response.body, "response body");
306+expect(body.ok).toBe(true);
307+expect(body.targetId).toBe("7");
308+const evaluateParams = requireRecord(
309+callArg(chromeMcpMocks.evaluateChromeMcpScript, 0, 0, "evaluate params"),
310+"evaluate params",
311+);
312+expect(evaluateParams.profileName).toBe("chrome-live");
313+expectExistingSessionProfile(evaluateParams.profile);
314+expect(evaluateParams.userDataDir).toBeUndefined();
315+expect(evaluateParams.targetId).toBe("7");
316+expect(evaluateParams.fn).toBe("() => window.location.href");
295317});
296318297319it("forwards click timeoutMs to the existing-session click executor", async () => {
@@ -310,15 +332,17 @@ describe("existing-session browser routes", () => {
310332);
311333312334expect(response.statusCode).toBe(200);
313-expect(chromeMcpMocks.clickChromeMcpElement).toHaveBeenCalledWith({
314-profileName: "chrome-live",
315-profile: expect.objectContaining({ name: "chrome-live", driver: "existing-session" }),
316-targetId: "7",
317-uid: "btn-1",
318-doubleClick: false,
319-timeoutMs: 1234,
320-signal: ctrl.signal,
321-});
335+const clickParams = requireRecord(
336+callArg(chromeMcpMocks.clickChromeMcpElement, 0, 0, "click params"),
337+"click params",
338+);
339+expect(clickParams.profileName).toBe("chrome-live");
340+expectExistingSessionProfile(clickParams.profile);
341+expect(clickParams.targetId).toBe("7");
342+expect(clickParams.uid).toBe("btn-1");
343+expect(clickParams.doubleClick).toBe(false);
344+expect(clickParams.timeoutMs).toBe(1234);
345+expect(clickParams.signal).toBe(ctrl.signal);
322346});
323347324348it("supports coordinate clicks for existing-session profiles", async () => {
@@ -335,16 +359,21 @@ describe("existing-session browser routes", () => {
335359);
336360337361expect(response.statusCode).toBe(200);
338-expect(response.body).toMatchObject({ ok: true, targetId: "7", url: "https://example.com" });
339-expect(chromeMcpMocks.clickChromeMcpCoords).toHaveBeenCalledWith({
340-profileName: "chrome-live",
341-profile: expect.objectContaining({ name: "chrome-live", driver: "existing-session" }),
342-targetId: "7",
343-x: 25,
344-y: 32,
345-doubleClick: true,
346-button: undefined,
347-delayMs: 5,
348-});
362+const body = requireRecord(response.body, "response body");
363+expect(body.ok).toBe(true);
364+expect(body.targetId).toBe("7");
365+expect(body.url).toBe("https://example.com");
366+const clickParams = requireRecord(
367+callArg(chromeMcpMocks.clickChromeMcpCoords, 0, 0, "coordinate click params"),
368+"coordinate click params",
369+);
370+expect(clickParams.profileName).toBe("chrome-live");
371+expectExistingSessionProfile(clickParams.profile);
372+expect(clickParams.targetId).toBe("7");
373+expect(clickParams.x).toBe(25);
374+expect(clickParams.y).toBe(32);
375+expect(clickParams.doubleClick).toBe(true);
376+expect(clickParams.button).toBeUndefined();
377+expect(clickParams.delayMs).toBe(5);
349378});
350379});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。