@@ -263,6 +263,11 @@ class Server extends KarmaEventEmitter {
263263 } 
264264 } ) 
265265
266+  this . on ( 'stop' ,  function  ( done )  { 
267+  this . log . debug ( 'Received stop event, exiting.' ) 
268+  return  disconnectBrowsers ( ) . then ( done ) 
269+  } ) 
270+ 
266271 if  ( config . singleRun )  { 
267272 this . on ( 'browser_restart_failure' ,  ( completedBrowser )  =>  { 
268273 singleRunDoneBrowsers [ completedBrowser . id ]  =  true 
@@ -327,14 +332,17 @@ class Server extends KarmaEventEmitter {
327332 done ( code  ||  0 ) 
328333 } 
329334
330-  this . emitAsync ( 'exit' ) . then ( ( )  =>  { 
331-  socketServer . sockets . removeAllListeners ( ) 
332-  socketServer . close ( ) 
333-  const  closeTimeout  =  setTimeout ( removeAllListeners ,  webServerCloseTimeout ) 
335+  return  this . emitAsync ( 'exit' ) . then ( ( )  =>  { 
336+  return  new  Promise ( ( resolve ,  reject )  =>  { 
337+  socketServer . sockets . removeAllListeners ( ) 
338+  socketServer . close ( ) 
339+  const  closeTimeout  =  setTimeout ( removeAllListeners ,  webServerCloseTimeout ) 
334340
335-  webServer . close ( ( )  =>  { 
336-  clearTimeout ( closeTimeout ) 
337-  removeAllListeners ( ) 
341+  webServer . close ( ( )  =>  { 
342+  clearTimeout ( closeTimeout ) 
343+  removeAllListeners ( ) 
344+  resolve ( ) 
345+  } ) 
338346 } ) 
339347 } ) 
340348 } 
@@ -373,6 +381,10 @@ class Server extends KarmaEventEmitter {
373381 child . unref ( ) 
374382 } 
375383
384+  stop  ( )  { 
385+  return  this . emitAsync ( 'stop' ) 
386+  } 
387+ 
376388 static  start  ( cliOptions ,  done )  { 
377389 console . warn ( 'Deprecated static method to be removed in v3.0' ) 
378390 return  new  Server ( cliOptions ,  done ) . start ( ) 
0 commit comments