From d857b83d5ac3e693576e927fdb505aea24df4f49 Mon Sep 17 00:00:00 2001 From: Shakker Date: Sat, 9 May 2026 01:11:46 +0100 Subject: [PATCH] test: clear feishu outbound cleanup timer --- extensions/feishu/src/outbound.test.ts | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/extensions/feishu/src/outbound.test.ts b/extensions/feishu/src/outbound.test.ts index a7aa30593f8..92cb7a51cbc 100644 --- a/extensions/feishu/src/outbound.test.ts +++ b/extensions/feishu/src/outbound.test.ts @@ -76,6 +76,22 @@ import { feishuPlugin } from "./channel.js"; import { feishuOutbound } from "./outbound.js"; import { createFeishuSendReceipt } from "./send-result.js"; +async function raceWithNextMacrotask(promise: Promise): Promise { + let timer: ReturnType | undefined; + try { + return await Promise.race([ + promise, + new Promise<"pending">((resolve) => { + timer = setTimeout(() => resolve("pending"), 0); + }), + ]); + } finally { + if (timer) { + clearTimeout(timer); + } + } +} + type FeishuSendText = NonNullable; type FeishuMessageAdapter = NonNullable; type FeishuMessageSender = NonNullable; @@ -867,10 +883,7 @@ describe("feishuOutbound comment-thread routing", () => { accountId: "main", }); - const status = await Promise.race([ - sendPromise.then(() => "done"), - new Promise((resolve) => setTimeout(() => resolve("pending"), 0)), - ]); + const status = await raceWithNextMacrotask(sendPromise.then(() => "done")); expect(status).toBe("done"); expect(deliverCommentThreadTextMock).toHaveBeenCalled();