diff --git a/packages/workbench/tests/evals-real.e2e.test.ts b/packages/workbench/tests/evals-real.e2e.test.ts index 1061b461c..2634082c0 100644 --- a/packages/workbench/tests/evals-real.e2e.test.ts +++ b/packages/workbench/tests/evals-real.e2e.test.ts @@ -462,7 +462,6 @@ e2e('fails closed while replacing an active Eval client and ignores every late c }).__evalClientScopeFixture.stats().eventsB)).toEqual(['run-b']); expect(pageErrors).toEqual([]); } finally { - await page.goto('about:blank'); await fixture.close(); } }); diff --git a/packages/workbench/tests/support/http.ts b/packages/workbench/tests/support/http.ts index 448beb898..1f3c70071 100644 --- a/packages/workbench/tests/support/http.ts +++ b/packages/workbench/tests/support/http.ts @@ -1,6 +1,14 @@ import type { Server } from 'node:http'; +/** + * Teardown must not wait for the browser to release its connections: Node's + * `server.close()` blocks while any connection still has a request in flight, + * which hangs test teardown on two-core CI runners where the page can hold a + * request open at close time. Destroying connections first keeps `close()` + * deterministic regardless of browser state. + */ export const closeServer = async (server: Server): Promise => { + server.closeAllConnections(); await new Promise((resolve, reject) => { server.close((error) => error === undefined ? resolve() : reject(error)); });