From 166372cc3ed23a5debbc9ce43f47352ee1ae31f8 Mon Sep 17 00:00:00 2001 From: DarkSky <25152247+darkskygit@users.noreply.github.com> Date: Tue, 24 Mar 2026 09:59:10 +0800 Subject: [PATCH] fix: test in mac (#14712) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit #### PR Dependency Tree * **PR #14712** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) ## Summary by CodeRabbit * **Chores** * Enhanced Electron test environment cleanup with improved termination signal handling and child process resource management. --- tests/kit/src/electron.ts | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/kit/src/electron.ts b/tests/kit/src/electron.ts index d693a7c27f..672b5c9d6e 100644 --- a/tests/kit/src/electron.ts +++ b/tests/kit/src/electron.ts @@ -194,25 +194,38 @@ const cleanupElectronApp = async (electronApp: ElectronApplication) => { const closeWithTimeout = async () => { const closeEvent = waitForAppClose(); + const processExit = waitForProcessExit(); + const pid = child.pid; + void electronApp.close().catch(() => {}); const controller = new AbortController(); const killAfterTimeout = setTimeout(10_000, undefined, { signal: controller.signal, }) - .then(() => { + .then(async () => { + if (child.exitCode !== null || child.signalCode !== null) return; + if (pid !== undefined) { + await treeKillAsync(pid, 'SIGKILL').catch(() => { + killProcess(); + }); + return; + } + killProcess(); }) .catch(error => { - if (error instanceof Error && error.name === 'AbortError') { - return; - } + if (error instanceof Error && error.name === 'AbortError') return; throw error; }); try { - await Promise.all([electronApp.close().catch(() => {}), closeEvent]); + await Promise.race([closeEvent, processExit, killAfterTimeout]); } finally { controller.abort(); await killAfterTimeout; + await Promise.race([closeEvent, processExit, setTimeout(5_000)]).catch( + () => {} + ); + releaseChildProcessHandles(child); } };