




























11import { EventEmitter } from "node:events";
2-import { mkdtemp, rm } from "node:fs/promises";
2+import { mkdtempSync, rmSync } from "node:fs";
33import { tmpdir } from "node:os";
44import path from "node:path";
55import type { ChannelGatewayContext } from "openclaw/plugin-sdk/channel-contract";
@@ -13,6 +13,15 @@ class FakeBridge extends EventEmitter {
1313kill = vi.fn(() => true);
1414}
151516+const tempDirs = new Set<string>();
17+18+function makeTempDir(prefix: string): string {
19+// openclaw-temp-dir: allow extension tests cannot import root test helpers
20+const dir = mkdtempSync(path.join(tmpdir(), prefix));
21+tempDirs.add(dir);
22+return dir;
23+}
24+1625function createContext(accountId = "default") {
1726const status = {
1827 accountId,
@@ -117,12 +126,19 @@ async function waitFor<T>(getValue: () => T | undefined): Promise<T> {
117126if (value !== undefined) {
118127return value;
119128}
120-await new Promise((resolve) => setTimeout(resolve, 5));
129+await new Promise<void>((resolve) => {
130+setTimeout(resolve, 5);
131+});
121132}
122133throw new Error("Timed out waiting for value.");
123134}
124135125136afterEach(() => {
137+resetPluginStateStoreForTests();
138+for (const dir of tempDirs) {
139+rmSync(dir, { force: true, recursive: true });
140+}
141+tempDirs.clear();
126142vi.restoreAllMocks();
127143});
128144@@ -142,7 +158,9 @@ describe("Raft wake gateway", () => {
142158settled = true;
143159});
144160145-await new Promise((resolve) => setTimeout(resolve, 0));
161+await new Promise<void>((resolve) => {
162+setTimeout(resolve, 0);
163+});
146164expect(settled).toBe(false);
147165expect(spawnBridge).not.toHaveBeenCalled();
148166@@ -213,7 +231,9 @@ describe("Raft wake gateway", () => {
213231body: JSON.stringify({ eventId: "wake-1", timestamp: 2 }),
214232}),
215233).resolves.toMatchObject({ status: 202 });
216-await new Promise((resolve) => setTimeout(resolve, 0));
234+await new Promise<void>((resolve) => {
235+setTimeout(resolve, 0);
236+});
217237expect(run).toHaveBeenCalledTimes(1);
218238await expect(
219239fetch(wakeEndpoint, {
@@ -311,7 +331,7 @@ describe("Raft wake gateway", () => {
311331});
312332313333it("persists accepted wake dedupe across restarts without crossing accounts", async () => {
314-const stateDir = await mkdtemp(path.join(tmpdir(), "openclaw-raft-wake-dedupe-"));
334+const stateDir = makeTempDir("openclaw-raft-wake-dedupe-");
315335try {
316336const first = createContext();
317337Object.defineProperty(first.ctx, "abortSignal", { value: first.controller.signal });
@@ -403,7 +423,6 @@ describe("Raft wake gateway", () => {
403423}
404424} finally {
405425resetPluginStateStoreForTests();
406-await rm(stateDir, { force: true, recursive: true });
407426}
408427});
409428此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。