test: speed up browser suites

This commit is contained in:
Peter Steinberger 2026-03-24 17:48:39 +00:00
parent 217cb0ac58
commit 6e9591c4ce
5 changed files with 27 additions and 12 deletions

View File

@ -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();

View File

@ -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 = {

View File

@ -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"));

View File

@ -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();

View File

@ -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 () => {