@@ -28,18 +28,20 @@ const {
2828}  =  require ( 'internal/test_runner/utils' ) ; 
2929const  {  queueMicrotask }  =  require ( 'internal/process/task_queues' ) ; 
3030const  {  bigint : hrtime  }  =  process . hrtime ; 
31- 
31+ const   resolvedPromise   =   PromiseResolve ( ) ; 
3232const  testResources  =  new  SafeMap ( ) ; 
33+ let  globalRoot ; 
3334
3435testResources . set ( reporterScope . asyncId ( ) ,  reporterScope ) ; 
3536
3637function  createTestTree ( options  =  kEmptyObject )  { 
37-   return  setup ( new  Test ( {  __proto__ : null ,  ...options ,  name : '<root>'  } ) ) ; 
38+   globalRoot  =  setup ( new  Test ( {  __proto__ : null ,  ...options ,  name : '<root>'  } ) ) ; 
39+   return  globalRoot ; 
3840} 
3941
4042function  createProcessEventHandler ( eventName ,  rootTest )  { 
4143  return  ( err )  =>  { 
42-     if  ( ! rootTest . harness . bootstrapComplete )  { 
44+     if  ( rootTest . harness . bootstrapPromise )  { 
4345      // Something went wrong during the asynchronous portion of bootstrapping 
4446      // the test runner. Since the test runner is not setup properly, we can't 
4547      // do anything but throw the error. 
@@ -196,7 +198,7 @@ function setup(root) {
196198  root . harness  =  { 
197199    __proto__ : null , 
198200    allowTestsToRun : false , 
199-     bootstrapComplete :  false , 
201+     bootstrapPromise :  resolvedPromise , 
200202    watching : false , 
201203    coverage : FunctionPrototypeBind ( collectCoverage ,  null ,  root ,  coverage ) , 
202204    resetCounters ( )  { 
@@ -222,33 +224,30 @@ function setup(root) {
222224  return  root ; 
223225} 
224226
225- let  globalRoot ; 
226- let  asyncBootstrap ; 
227227function  lazyBootstrapRoot ( )  { 
228228  if  ( ! globalRoot )  { 
229-     globalRoot  =  createTestTree ( {  __proto__ : null ,  entryFile : process . argv ?. [ 1 ]  } ) ; 
229+     // This is where the test runner is bootstrapped when node:test is used 
230+     // without the --test flag or the run() API. 
231+     createTestTree ( {  __proto__ : null ,  entryFile : process . argv ?. [ 1 ]  } ) ; 
230232    globalRoot . reporter . on ( 'test:fail' ,  ( data )  =>  { 
231233      if  ( data . todo  ===  undefined  ||  data . todo  ===  false )  { 
232234        process . exitCode  =  kGenericUserError ; 
233235      } 
234236    } ) ; 
235-     asyncBootstrap  =  setupTestReporters ( globalRoot . reporter ) ; 
237+     globalRoot . harness . bootstrapPromise  =  setupTestReporters ( globalRoot . reporter ) ; 
236238  } 
237239  return  globalRoot ; 
238240} 
239241
240- async  function  startSubtest ( subtest )  { 
241-   if  ( asyncBootstrap )  { 
242+ async  function  startSubtestAfterBootstrap ( subtest )  { 
243+   if  ( subtest . root . harness . bootstrapPromise )  { 
242244    // Only incur the overhead of awaiting the Promise once. 
243-     await  asyncBootstrap ; 
244-     asyncBootstrap  =  undefined ; 
245-     if  ( ! subtest . root . harness . bootstrapComplete )  { 
246-       subtest . root . harness . bootstrapComplete  =  true ; 
247-       queueMicrotask ( ( )  =>  { 
248-         subtest . root . harness . allowTestsToRun  =  true ; 
249-         subtest . root . processPendingSubtests ( ) ; 
250-       } ) ; 
251-     } 
245+     await  subtest . root . harness . bootstrapPromise ; 
246+     subtest . root . harness . bootstrapPromise  =  null ; 
247+     queueMicrotask ( ( )  =>  { 
248+       subtest . root . harness . allowTestsToRun  =  true ; 
249+       subtest . root . processPendingSubtests ( ) ; 
250+     } ) ; 
252251  } 
253252
254253  await  subtest . start ( ) ; 
@@ -262,7 +261,7 @@ function runInParentContext(Factory) {
262261      return  PromiseResolve ( ) ; 
263262    } 
264263
265-     return  startSubtest ( subtest ) ; 
264+     return  startSubtestAfterBootstrap ( subtest ) ; 
266265  } 
267266
268267  const  test  =  ( name ,  options ,  fn )  =>  { 
0 commit comments