@@ -51,8 +51,13 @@ function launchWorker(filename, initialData) {
51
51
export async function observeWorkerProcess ( fork , runStatus ) {
52
52
let registrationCount = 0 ;
53
53
let signalDeregistered ;
54
+ let launched ;
54
55
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
+ } ;
56
61
} ) ;
57
62
58
63
fork . promise . finally ( ( ) => {
@@ -62,7 +67,7 @@ export async function observeWorkerProcess(fork, runStatus) {
62
67
} ) ;
63
68
64
69
fork . onConnectSharedWorker ( async ( { filename, initialData, port, signalError} ) => {
65
- const launched = launchWorker ( filename , initialData ) ;
70
+ launched = launchWorker ( filename , initialData ) ;
66
71
67
72
const handleWorkerMessage = async message => {
68
73
if ( message . type === 'deregistered-test-worker' && message . id === fork . threadId ) {
@@ -104,14 +109,7 @@ export async function observeWorkerProcess(fork, runStatus) {
104
109
} ) ;
105
110
106
111
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 { }
115
113
} ) ;
116
114
117
115
return deregistered ;
0 commit comments