Files
opsxapi/src/features/testing/execution.test.ts
T
logan 2bb4ef7a95 桌面 GUI 外链修复 + 主题顺序调整(含结构扁平化进行中的工作区基线)
- 集成 tauri-plugin-opener:Cargo/lib.rs/capabilities/npm 四处接线,新增 src/openExternal.ts(桌面走 opener,浏览器回退 window.open,相对路径绝对化)
- 关于页 4 个链接、活动栏官网菜单、代理错误横幅 2 处健康检查链接全部改走 openExternal,桌面端可正常跳转
- 设置→外观 主题顺序调整为 深色/浅色/跟随系统
- release 二进制重编并验证(浏览器实测关于页链接可开文档页)
- 附带工作区中未提交的扁平化重构现状(另一会话进行中)
- homepage 落地页与文档终检通过(8787 / 与 /docs 双 200)
2026-10-16 03:03:36 +08:00

32 lines
1.5 KiB
TypeScript

import { describe, expect, it, vi } from "vitest";
import { executeOnce, useTestExecution } from "./execution";
describe("shared test execution", () => {
it("shares a pending run across entry points and releases it after completion", async () => {
let resolve!: (value: string) => void;
const task = vi.fn(() => new Promise<string>((r) => { resolve = r; }));
const first = executeOnce("case-1", task);
const second = executeOnce("case-1", task);
expect(first).toBe(second);
expect(useTestExecution.getState().running.has("case-1")).toBe(true);
await Promise.resolve();
expect(task).toHaveBeenCalledTimes(1);
resolve("report");
await expect(first).resolves.toBe("report");
expect(useTestExecution.getState().running.has("case-1")).toBe(false);
await expect(executeOnce("case-1", async () => "new report")).resolves.toBe("new report");
});
it("clears failed runs and allows retry without clearing other active cases", async () => {
let resolve!: () => void;
const other = executeOnce("other", () => new Promise<void>((r) => { resolve = r; }));
await expect(executeOnce("failed", () => { throw new Error("transport unavailable"); }))
.rejects.toThrow("transport unavailable");
expect([...useTestExecution.getState().running]).toEqual(["other"]);
await expect(executeOnce("failed", async () => "retry")).resolves.toBe("retry");
resolve();
await other;
expect(useTestExecution.getState().running.size).toBe(0);
});
});