From 6e9591c4ced2dba58a949f0a7f2be4e1ba24dab1 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 24 Mar 2026 17:48:39 +0000 Subject: [PATCH] test: speed up browser suites --- src/browser/client-fetch.loopback-auth.test.ts | 7 +++++-- ...w-tools-core.screenshots-element-selector.test.ts | 8 ++++++-- src/browser/routes/agent.existing-session.test.ts | 4 ++-- .../server-context.remote-profile-tab-ops.suite.ts | 12 +++++++++--- ....evaluate-disabled-does-not-block-storage.test.ts | 8 +++++--- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/browser/client-fetch.loopback-auth.test.ts b/src/browser/client-fetch.loopback-auth.test.ts index 029504cc91e..89dd13307ef 100644 --- a/src/browser/client-fetch.loopback-auth.test.ts +++ b/src/browser/client-fetch.loopback-auth.test.ts @@ -1,4 +1,4 @@ -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import type { BrowserDispatchResponse } from "./routes/dispatcher.js"; function okDispatchResponse(): BrowserDispatchResponse { @@ -85,9 +85,12 @@ async function expectThrownBrowserFetchError( } describe("fetchBrowserJson loopback auth", () => { - beforeEach(async () => { + beforeAll(async () => { vi.resetModules(); ({ fetchBrowserJson } = await import("./client-fetch.js")); + }); + + beforeEach(() => { vi.restoreAllMocks(); vi.stubEnv("OPENCLAW_GATEWAY_TOKEN", "loopback-token"); mocks.loadConfig.mockClear(); diff --git a/src/browser/pw-tools-core.screenshots-element-selector.test.ts b/src/browser/pw-tools-core.screenshots-element-selector.test.ts index 3b5cd15d631..3505a7f9ee0 100644 --- a/src/browser/pw-tools-core.screenshots-element-selector.test.ts +++ b/src/browser/pw-tools-core.screenshots-element-selector.test.ts @@ -1,7 +1,7 @@ import crypto from "node:crypto"; import fs from "node:fs/promises"; import path from "node:path"; -import { beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { DEFAULT_UPLOAD_DIR } from "./paths.js"; import { getPwToolsCoreSessionMocks, @@ -26,11 +26,15 @@ function createFileChooserPageMocks() { } describe("pw-tools-core", () => { - beforeEach(async () => { + beforeAll(async () => { vi.resetModules(); mod = await import("./pw-tools-core.js"); }); + beforeEach(() => { + vi.clearAllMocks(); + }); + it("screenshots an element selector", async () => { const elementScreenshot = vi.fn(async () => Buffer.from("E")); const page = { diff --git a/src/browser/routes/agent.existing-session.test.ts b/src/browser/routes/agent.existing-session.test.ts index c38acc45853..bf34fa5264a 100644 --- a/src/browser/routes/agent.existing-session.test.ts +++ b/src/browser/routes/agent.existing-session.test.ts @@ -1,4 +1,4 @@ -import { beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { createBrowserRouteApp, createBrowserRouteResponse } from "./test-helpers.js"; import type { BrowserRequest } from "./types.js"; @@ -97,7 +97,7 @@ vi.mock("./agent.shared.js", () => ({ let registerBrowserAgentActRoutes: typeof import("./agent.act.js").registerBrowserAgentActRoutes; let registerBrowserAgentSnapshotRoutes: typeof import("./agent.snapshot.js").registerBrowserAgentSnapshotRoutes; -beforeEach(async () => { +beforeAll(async () => { vi.resetModules(); ({ registerBrowserAgentActRoutes } = await import("./agent.act.js")); ({ registerBrowserAgentSnapshotRoutes } = await import("./agent.snapshot.js")); diff --git a/src/browser/server-context.remote-profile-tab-ops.suite.ts b/src/browser/server-context.remote-profile-tab-ops.suite.ts index c2beb05e457..c9a7fa34216 100644 --- a/src/browser/server-context.remote-profile-tab-ops.suite.ts +++ b/src/browser/server-context.remote-profile-tab-ops.suite.ts @@ -1,29 +1,35 @@ -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const originalFetch = globalThis.fetch; let chromeModule: typeof import("./chrome.js"); let InvalidBrowserNavigationUrlError: typeof import("./navigation-guard.js").InvalidBrowserNavigationUrlError; let pwAiModule: typeof import("./pw-ai-module.js"); +let closePlaywrightBrowserConnection: typeof import("./pw-session.js").closePlaywrightBrowserConnection; let createBrowserRouteContext: typeof import("./server-context.js").createBrowserRouteContext; let createJsonListFetchMock: typeof import("./server-context.remote-tab-ops.harness.js").createJsonListFetchMock; let createRemoteRouteHarness: typeof import("./server-context.remote-tab-ops.harness.js").createRemoteRouteHarness; let createSequentialPageLister: typeof import("./server-context.remote-tab-ops.harness.js").createSequentialPageLister; let makeState: typeof import("./server-context.remote-tab-ops.harness.js").makeState; -beforeEach(async () => { +beforeAll(async () => { vi.resetModules(); await import("./server-context.chrome-test-harness.js"); chromeModule = await import("./chrome.js"); ({ InvalidBrowserNavigationUrlError } = await import("./navigation-guard.js")); pwAiModule = await import("./pw-ai-module.js"); + ({ closePlaywrightBrowserConnection } = await import("./pw-session.js")); ({ createBrowserRouteContext } = await import("./server-context.js")); ({ createJsonListFetchMock, createRemoteRouteHarness, createSequentialPageLister, makeState } = await import("./server-context.remote-tab-ops.harness.js")); }); +beforeEach(() => { + vi.clearAllMocks(); + globalThis.fetch = originalFetch; +}); + afterEach(async () => { - const { closePlaywrightBrowserConnection } = await import("./pw-session.js"); await closePlaywrightBrowserConnection().catch(() => {}); globalThis.fetch = originalFetch; vi.restoreAllMocks(); diff --git a/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts b/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts index 611b559bd75..4a46a79c2ea 100644 --- a/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts +++ b/src/browser/server.evaluate-disabled-does-not-block-storage.test.ts @@ -1,4 +1,4 @@ -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import { getBrowserTestFetch } from "./test-fetch.js"; import { getFreePort } from "./test-port.js"; @@ -69,10 +69,13 @@ let startBrowserControlServerFromConfig: typeof import("./server.js").startBrows let stopBrowserControlServer: typeof import("./server.js").stopBrowserControlServer; describe("browser control evaluate gating", () => { - beforeEach(async () => { + beforeAll(async () => { vi.resetModules(); ({ startBrowserControlServerFromConfig, stopBrowserControlServer } = await import("./server.js")); + }); + + beforeEach(async () => { testPort = await getFreePort(); prevGatewayPort = process.env.OPENCLAW_GATEWAY_PORT; process.env.OPENCLAW_GATEWAY_PORT = String(testPort - 2); @@ -107,7 +110,6 @@ describe("browser control evaluate gating", () => { } await stopBrowserControlServer(); - vi.resetModules(); }); it("blocks act:evaluate but still allows cookies/storage reads", async () => {