mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-11 03:34:33 +00:00
test: dedupe and optimize test suites
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import { beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
let page: { evaluate: ReturnType<typeof vi.fn> } | null = null;
|
||||
let locator: { evaluate: ReturnType<typeof vi.fn> } | null = null;
|
||||
@@ -29,64 +29,61 @@ vi.mock("./pw-session.js", () => {
|
||||
};
|
||||
});
|
||||
|
||||
describe("evaluateViaPlaywright (abort)", () => {
|
||||
it("rejects when aborted after page.evaluate starts", async () => {
|
||||
vi.clearAllMocks();
|
||||
const ctrl = new AbortController();
|
||||
let evaluateViaPlaywright: typeof import("./pw-tools-core.interactions.js").evaluateViaPlaywright;
|
||||
|
||||
let evalCalled!: () => void;
|
||||
const evalCalledPromise = new Promise<void>((resolve) => {
|
||||
evalCalled = resolve;
|
||||
});
|
||||
function createPendingEval() {
|
||||
let evalCalled!: () => void;
|
||||
const evalCalledPromise = new Promise<void>((resolve) => {
|
||||
evalCalled = resolve;
|
||||
});
|
||||
return {
|
||||
evalCalledPromise,
|
||||
resolveEvalCalled: evalCalled,
|
||||
};
|
||||
}
|
||||
|
||||
describe("evaluateViaPlaywright (abort)", () => {
|
||||
beforeAll(async () => {
|
||||
({ evaluateViaPlaywright } = await import("./pw-tools-core.interactions.js"));
|
||||
});
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
});
|
||||
|
||||
it.each([
|
||||
{ label: "page.evaluate", fn: "() => 1" },
|
||||
{ label: "locator.evaluate", fn: "(el) => el.textContent", ref: "e1" },
|
||||
])("rejects when aborted after $label starts", async ({ fn, ref }) => {
|
||||
const ctrl = new AbortController();
|
||||
const pending = createPendingEval();
|
||||
const pendingPromise = new Promise(() => {});
|
||||
|
||||
page = {
|
||||
evaluate: vi.fn(() => {
|
||||
evalCalled();
|
||||
return new Promise(() => {});
|
||||
if (!ref) {
|
||||
pending.resolveEvalCalled();
|
||||
}
|
||||
return pendingPromise;
|
||||
}),
|
||||
};
|
||||
locator = { evaluate: vi.fn() };
|
||||
|
||||
const { evaluateViaPlaywright } = await import("./pw-tools-core.interactions.js");
|
||||
const p = evaluateViaPlaywright({
|
||||
cdpUrl: "http://127.0.0.1:9222",
|
||||
fn: "() => 1",
|
||||
signal: ctrl.signal,
|
||||
});
|
||||
|
||||
await evalCalledPromise;
|
||||
ctrl.abort(new Error("aborted by test"));
|
||||
|
||||
await expect(p).rejects.toThrow("aborted by test");
|
||||
expect(forceDisconnectPlaywrightForTarget).toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("rejects when aborted after locator.evaluate starts", async () => {
|
||||
vi.clearAllMocks();
|
||||
const ctrl = new AbortController();
|
||||
|
||||
let evalCalled!: () => void;
|
||||
const evalCalledPromise = new Promise<void>((resolve) => {
|
||||
evalCalled = resolve;
|
||||
});
|
||||
|
||||
page = { evaluate: vi.fn() };
|
||||
locator = {
|
||||
evaluate: vi.fn(() => {
|
||||
evalCalled();
|
||||
return new Promise(() => {});
|
||||
if (ref) {
|
||||
pending.resolveEvalCalled();
|
||||
}
|
||||
return pendingPromise;
|
||||
}),
|
||||
};
|
||||
|
||||
const { evaluateViaPlaywright } = await import("./pw-tools-core.interactions.js");
|
||||
const p = evaluateViaPlaywright({
|
||||
cdpUrl: "http://127.0.0.1:9222",
|
||||
fn: "(el) => el.textContent",
|
||||
ref: "e1",
|
||||
fn,
|
||||
ref,
|
||||
signal: ctrl.signal,
|
||||
});
|
||||
|
||||
await evalCalledPromise;
|
||||
await pending.evalCalledPromise;
|
||||
ctrl.abort(new Error("aborted by test"));
|
||||
|
||||
await expect(p).rejects.toThrow("aborted by test");
|
||||
|
||||
Reference in New Issue
Block a user