From d5be8fa576d64eb03a85d9c3184e8429dc86f030 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 18 Jan 2026 05:35:26 +0000 Subject: [PATCH] test: avoid timer hangs in cron tests --- src/gateway/server.cron.test.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/gateway/server.cron.test.ts b/src/gateway/server.cron.test.ts index a0a3157ac..a53a1b710 100644 --- a/src/gateway/server.cron.test.ts +++ b/src/gateway/server.cron.test.ts @@ -13,6 +13,11 @@ import { installGatewayTestHooks(); +async function yieldToEventLoop() { + // Avoid relying on timers (fake timers can leak between tests). + await fs.stat(process.cwd()).catch(() => {}); +} + describe("gateway server cron", () => { test("supports cron.add and cron.list", async () => { const dir = await fs.mkdtemp(path.join(os.tmpdir(), "clawdbot-gw-cron-")); @@ -265,7 +270,7 @@ describe("gateway server cron", () => { for (let i = 0; i < 200; i += 1) { const raw = await fs.readFile(logPath, "utf-8").catch(() => ""); if (raw.trim().length > 0) return raw; - await new Promise((r) => setTimeout(r, 10)); + await yieldToEventLoop(); } throw new Error("timeout waiting for cron run log"); }; @@ -333,7 +338,7 @@ describe("gateway server cron", () => { for (let i = 0; i < 200; i += 1) { const raw = await fs.readFile(logPath, "utf-8").catch(() => ""); if (raw.trim().length > 0) return raw; - await new Promise((r) => setTimeout(r, 10)); + await yieldToEventLoop(); } throw new Error("timeout waiting for per-job cron run log"); }; @@ -414,7 +419,7 @@ describe("gateway server cron", () => { expect(runsRes.ok).toBe(true); const entries = (runsRes.payload as { entries?: unknown } | null)?.entries; if (Array.isArray(entries) && entries.length > 0) return entries; - await new Promise((r) => setTimeout(r, 20)); + await yieldToEventLoop(); } throw new Error("timeout waiting for cron.runs entries"); };