@@ -51,8 +51,13 @@ function launchWorker(filename, initialData) {
5151export async function observeWorkerProcess ( fork , runStatus ) {
5252 let registrationCount = 0 ;
5353 let signalDeregistered ;
54+ let launched ;
5455 const deregistered = new Promise ( resolve => {
55- signalDeregistered = resolve ;
56+ signalDeregistered = ( ) => {
57+ // Only unref the worker once all test workers have been deregistered, otherwise the worker may exit before test workers are deregistered
58+ launched ?. worker . unref ( ) ;
59+ resolve ( ) ;
60+ } ;
5661 } ) ;
5762
5863 fork . promise . finally ( ( ) => {
@@ -62,7 +67,7 @@ export async function observeWorkerProcess(fork, runStatus) {
6267 } ) ;
6368
6469 fork . onConnectSharedWorker ( async ( { filename, initialData, port, signalError} ) => {
65- const launched = launchWorker ( filename , initialData ) ;
70+ launched = launchWorker ( filename , initialData ) ;
6671
6772 const handleWorkerMessage = async message => {
6873 if ( message . type === 'deregistered-test-worker' && message . id === fork . threadId ) {
@@ -104,14 +109,7 @@ export async function observeWorkerProcess(fork, runStatus) {
104109 } ) ;
105110
106111 launched . worker . on ( 'message' , handleWorkerMessage ) ;
107- } catch {
108- return ;
109- } finally {
110- // Attaching listeners has the side-effect of referencing the worker.
111- // Explicitly unreference it now so it does not prevent the main process
112- // from exiting.
113- launched . worker . unref ( ) ;
114- }
112+ } catch { }
115113 } ) ;
116114
117115 return deregistered ;
0 commit comments