


















@@ -53,6 +53,26 @@ function setNoAbort() {
5353mocks.tryFastAbortFromMessage.mockResolvedValue(noAbortResult);
5454}
555556+async function raceWithTimeoutResult<T>(
57+promise: Promise<T>,
58+timeoutMs: number,
59+timeoutResult: T,
60+): Promise<T> {
61+let timer: ReturnType<typeof setTimeout> | undefined;
62+try {
63+return await Promise.race([
64+promise,
65+new Promise<T>((resolve) => {
66+timer = setTimeout(() => resolve(timeoutResult), timeoutMs);
67+}),
68+]);
69+} finally {
70+if (timer) {
71+clearTimeout(timer);
72+}
73+}
74+}
75+5676function createMockAcpSessionManager() {
5777return {
5878resolveSession: (params: { cfg: OpenClawConfig; sessionKey: string }) => {
@@ -260,12 +280,11 @@ describe("dispatchReplyFromConfig ACP abort", () => {
260280expect(runtime.runTurn).toHaveBeenCalledTimes(1);
261281});
262282abortController.abort();
263-const outcome = await Promise.race([
283+const outcome = await raceWithTimeoutResult(
264284dispatchPromise.then(() => "settled" as const),
265-new Promise<"pending">((resolve) => {
266-setTimeout(() => resolve("pending"), 100);
267-}),
268-]);
285+100,
286+"pending" as const,
287+);
269288releaseTurn?.();
270289await dispatchPromise;
271290此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。