





















@@ -47,6 +47,22 @@ async function reservePort(): Promise<number> {
4747return port;
4848}
494950+async function withTimeout<T>(promise: Promise<T>, timeoutMs: number, message: string): Promise<T> {
51+let timer: NodeJS.Timeout | undefined;
52+try {
53+return await Promise.race([
54+promise,
55+new Promise<never>((_resolve, reject) => {
56+timer = setTimeout(() => reject(new Error(message)), timeoutMs);
57+}),
58+]);
59+} finally {
60+if (timer) {
61+clearTimeout(timer);
62+}
63+}
64+}
65+5066async function createFakeGateway(port = 0): Promise<FakeGateway> {
5167const server = new WebSocketServer({ host: "127.0.0.1", port });
5268servers.push(server);
@@ -340,12 +356,9 @@ describe("OpenClaw SDK websocket e2e", () => {
340356341357return seen;
342358})();
343-const timeoutPromise = new Promise<never>((_resolve, reject) => {
344-setTimeout(() => reject(new Error("timed out waiting for SDK run events")), 2_000);
345-});
346359347360const [seen, result] = await Promise.all([
348-Promise.race([seenPromise, timeoutPromise]),
361+withTimeout(seenPromise, 2_000, "timed out waiting for SDK run events"),
349362run.wait({ timeoutMs: 2_000 }),
350363]);
351364@@ -515,9 +528,6 @@ describe("OpenClaw SDK real Gateway e2e", () => {
515528}
516529return { seen, sessionKeys };
517530})();
518-const eventsTimeout = new Promise<never>((_resolve, reject) => {
519-setTimeout(() => reject(new Error("timed out waiting for real Gateway SDK events")), 2_000);
520-});
521531522532emitAgentEvent({
523533 runId,
@@ -535,7 +545,11 @@ describe("OpenClaw SDK real Gateway e2e", () => {
535545data: { phase: "end", endedAt: 222 },
536546});
537547538-const { seen, sessionKeys } = await Promise.race([eventsPromise, eventsTimeout]);
548+const { seen, sessionKeys } = await withTimeout(
549+eventsPromise,
550+2_000,
551+"timed out waiting for real Gateway SDK events",
552+);
539553expect(seen).toEqual(["run.started", "assistant.delta", "run.completed"]);
540554expect(sessionKeys).toEqual([
541555"agent:main:dashboard:sdk-real-gateway",
@@ -615,12 +629,11 @@ liveGatewayDescribe("OpenClaw SDK live Gateway e2e", () => {
615629})();
616630617631const result = await run.wait({ timeoutMs: 180_000 });
618-const events = await Promise.race([
632+const events = await withTimeout(
619633eventsPromise,
620-new Promise<never>((_resolve, reject) => {
621-setTimeout(() => reject(new Error("timed out waiting for live SDK run events")), 5_000);
622-}),
623-]);
634+5_000,
635+"timed out waiting for live SDK run events",
636+);
624637625638expect(result.status).toBe("completed");
626639expect(events.terminal).toBe("run.completed");
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。