
























@@ -17,6 +17,17 @@ function page(targetId: string, url = `https://${targetId.toLowerCase()}.example
1717};
1818}
191920+async function expectBlockedCdpEndpoint(promise: Promise<unknown>) {
21+try {
22+await promise;
23+} catch (error) {
24+expect((error as { name?: unknown }).name).toBe("BrowserCdpEndpointBlockedError");
25+expect((error as { status?: unknown }).status).toBe(400);
26+return;
27+}
28+throw new Error("expected blocked browser CDP endpoint");
29+}
30+2031describe("browser remote profile tab ops via Playwright", () => {
2132it("uses Playwright tab operations when available", async () => {
2233const listPagesViaPlaywright = vi.fn(async () => [
@@ -81,17 +92,16 @@ describe("browser remote profile tab ops via Playwright", () => {
8192expect(tabs.map((tab) => tab.suggestedTargetId)).toEqual(["t1", "t2"]);
82938394const labeled = await remote.labelTab("t2", "docs");
84-expect(labeled).toMatchObject({
85-targetId: "B",
86-suggestedTargetId: "docs",
87-tabId: "t2",
88-label: "docs",
89-});
95+expect(labeled.targetId).toBe("B");
96+expect(labeled.suggestedTargetId).toBe("docs");
97+expect(labeled.tabId).toBe("t2");
98+expect(labeled.label).toBe("docs");
909991100await remote.focusTab("docs");
92-expect(focusPageByTargetIdViaPlaywright).toHaveBeenCalledWith(
93-expect.objectContaining({ targetId: "B" }),
94-);
101+const focusCall = (focusPageByTargetIdViaPlaywright.mock.calls as unknown[][])[0]?.[0] as
102+| { targetId?: unknown }
103+| undefined;
104+expect(focusCall?.targetId).toBe("B");
95105});
9610697107it("transfers stable aliases across a high-confidence target replacement", async () => {
@@ -105,24 +115,30 @@ describe("browser remote profile tab ops via Playwright", () => {
105115const { state, remote } = deps.createRemoteRouteHarness();
106116107117const first = await remote.listTabs();
108-expect(first).toMatchObject([{ targetId: "A", tabId: "t1", suggestedTargetId: "t1" }]);
118+expect(first).toHaveLength(1);
119+expect(first[0]?.targetId).toBe("A");
120+expect(first[0]?.tabId).toBe("t1");
121+expect(first[0]?.suggestedTargetId).toBe("t1");
109122const labeled = await remote.labelTab("t1", "form");
110-expect(labeled).toMatchObject({ targetId: "A", tabId: "t1", label: "form" });
123+expect(labeled.targetId).toBe("A");
124+expect(labeled.tabId).toBe("t1");
125+expect(labeled.label).toBe("form");
111126state.profiles.get("remote")!.lastTargetId = "A";
112127113128currentPages = [page("B", "https://app.example/submitted")];
114129115130const afterSwap = await remote.listTabs();
116-expect(afterSwap).toMatchObject([
117-{ targetId: "B", tabId: "t1", suggestedTargetId: "form", label: "form" },
118-]);
131+expect(afterSwap).toHaveLength(1);
132+expect(afterSwap[0]?.targetId).toBe("B");
133+expect(afterSwap[0]?.tabId).toBe("t1");
134+expect(afterSwap[0]?.suggestedTargetId).toBe("form");
135+expect(afterSwap[0]?.label).toBe("form");
119136expect(state.profiles.get("remote")?.lastTargetId).toBe("B");
120137await expect(remote.ensureTabAvailable("A")).rejects.toThrow(/tab not found/i);
121-await expect(remote.ensureTabAvailable("form")).resolves.toMatchObject({
122-targetId: "B",
123-tabId: "t1",
124-label: "form",
125-});
138+const formTab = await remote.ensureTabAvailable("form");
139+expect(formTab.targetId).toBe("B");
140+expect(formTab.tabId).toBe("t1");
141+expect(formTab.label).toBe("form");
126142});
127143128144it("does not transfer aliases when target replacement is ambiguous", async () => {
@@ -265,18 +281,9 @@ describe("browser remote profile tab ops via Playwright", () => {
265281const ctx = deps.createBrowserRouteContext({ getState: () => state });
266282const remote = ctx.forProfile("remote");
267283268-await expect(remote.listTabs()).rejects.toMatchObject({
269-name: "BrowserCdpEndpointBlockedError",
270-status: 400,
271-});
272-await expect(remote.focusTab("T1")).rejects.toMatchObject({
273-name: "BrowserCdpEndpointBlockedError",
274-status: 400,
275-});
276-await expect(remote.closeTab("T1")).rejects.toMatchObject({
277-name: "BrowserCdpEndpointBlockedError",
278-status: 400,
279-});
284+await expectBlockedCdpEndpoint(remote.listTabs());
285+await expectBlockedCdpEndpoint(remote.focusTab("T1"));
286+await expectBlockedCdpEndpoint(remote.closeTab("T1"));
280287expect(listPagesViaPlaywright).not.toHaveBeenCalled();
281288expect(focusPageByTargetIdViaPlaywright).not.toHaveBeenCalled();
282289expect(closePageByTargetIdViaPlaywright).not.toHaveBeenCalled();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。