diff --git a/test/js/web/workers/message-port-lifecycle.test.ts b/test/js/web/workers/message-port-lifecycle.test.ts index 1dfe6c67fc..4b85053e85 100644 --- a/test/js/web/workers/message-port-lifecycle.test.ts +++ b/test/js/web/workers/message-port-lifecycle.test.ts @@ -122,7 +122,18 @@ test("MessagePort immediate C++ tasks work with workers", async () => { let readyReceived = false; let doneReceived = false; - const { promise, resolve } = Promise.withResolvers(); + const { promise, resolve, reject: rejectWorker } = Promise.withResolvers(); + const { + promise: allMessagesReceived, + resolve: resolveAllMessages, + reject: rejectAllMessages, + } = Promise.withResolvers(); + + AbortSignal.timeout(100).addEventListener("abort", () => { + worker.terminate(); + rejectWorker(new Error("timeout")); + rejectAllMessages(new Error("timeout")); + }); worker.on("message", msg => { if (msg === "ready") { @@ -139,11 +150,15 @@ test("MessagePort immediate C++ tasks work with workers", async () => { port1.on("message", msg => { messages.push(msg); + + if (messages.length === 3) { + resolveAllMessages(); + } }); worker.postMessage({ port: port2 }, [port2]); - await promise; + await Promise.all([promise, allMessagesReceived]); assert.strictEqual(readyReceived, true); assert.strictEqual(doneReceived, true);