@@ -15,25 +15,23 @@ describe('server', () => {
15
15
let mockSocketServer
16
16
let mockBoundServer
17
17
let mockExecutor
18
- let doneSpy
18
+ let doneStub
19
19
let logErrorSpy
20
20
let server = mockConfig = browserCollection = webServerOnError = null
21
21
let fileListOnResolve = fileListOnReject = mockLauncher = null
22
- let mockFileList = mockWebServer = mockSocketServer = mockExecutor = doneSpy = null
22
+ let mockFileList = mockWebServer = mockSocketServer = mockExecutor = doneStub = null
23
23
const mockSocketEventListeners = new Map ( )
24
24
25
25
// Use regular function not arrow so 'this' is mocha 'this'.
26
26
beforeEach ( function ( ) {
27
27
// The first call to new Server() loads plugins and it can take >2000ms.
28
28
this . timeout ( 4000 )
29
29
browserCollection = new BrowserCollection ( )
30
- doneSpy = sinon . spy ( )
30
+ doneStub = sinon . stub ( )
31
31
logErrorSpy = sinon . spy ( logger . create ( 'karma-server' ) , 'error' )
32
32
33
33
fileListOnResolve = fileListOnReject = null
34
34
35
- doneSpy = sinon . spy ( )
36
-
37
35
mockConfig = {
38
36
frameworks : [ ] ,
39
37
port : 9876 ,
@@ -49,7 +47,7 @@ describe('server', () => {
49
47
browserNoActivityTimeout : 0
50
48
}
51
49
52
- server = new Server ( mockConfig , doneSpy )
50
+ server = new Server ( mockConfig , doneStub )
53
51
54
52
sinon . stub ( server . _injector , 'invoke' ) . returns ( [ ] )
55
53
@@ -120,10 +118,10 @@ describe('server', () => {
120
118
close : sinon . spy ( ( callback ) => callback && callback ( ) )
121
119
}
122
120
123
- sinon
124
- . stub ( server . _injector , 'get' )
125
- . withArgs ( 'webServer' ) . returns ( mockWebServer )
126
- . withArgs ( 'socketServer' ) . returns ( mockSocketServer )
121
+ const injectorStub = sinon . stub ( server . _injector , 'get' )
122
+ injectorStub . withArgs ( 'socketServer' ) . returns ( mockSocketServer )
123
+ injectorStub . withArgs ( 'webServer' ) . returns ( mockWebServer )
124
+ injectorStub . callThrough ( )
127
125
128
126
webServerOnError = null
129
127
} )
@@ -185,7 +183,7 @@ describe('server', () => {
185
183
} )
186
184
187
185
it ( 'should start the web server after all files have been preprocessed successfully' , async ( ) => {
188
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneSpy )
186
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
189
187
190
188
expect ( mockFileList . refresh ) . to . have . been . called
191
189
expect ( fileListOnResolve ) . not . to . be . null
@@ -199,7 +197,7 @@ describe('server', () => {
199
197
} )
200
198
201
199
it ( 'should start the web server after all files have been preprocessed with an error' , async ( ) => {
202
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneSpy )
200
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
203
201
204
202
expect ( mockFileList . refresh ) . to . have . been . called
205
203
expect ( fileListOnReject ) . not . to . be . null
@@ -215,7 +213,7 @@ describe('server', () => {
215
213
} )
216
214
217
215
it ( 'should launch browsers after the web server has started' , async ( ) => {
218
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneSpy )
216
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
219
217
220
218
expect ( mockWebServer . listen ) . not . to . have . been . called
221
219
expect ( webServerOnError ) . not . to . be . null
@@ -227,7 +225,7 @@ describe('server', () => {
227
225
} )
228
226
229
227
it ( 'should emit a listening event once server begin accepting connections' , async ( ) => {
230
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneSpy )
228
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
231
229
232
230
const listening = sinon . spy ( )
233
231
server . on ( 'listening' , listening )
@@ -239,7 +237,7 @@ describe('server', () => {
239
237
} )
240
238
241
239
it ( 'should emit a browsers_ready event once all the browsers are captured' , async ( ) => {
242
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneSpy )
240
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
243
241
244
242
const browsersReady = sinon . spy ( )
245
243
server . on ( 'browsers_ready' , browsersReady )
@@ -254,7 +252,7 @@ describe('server', () => {
254
252
} )
255
253
256
254
it ( 'should emit a browser_register event for each browser added' , async ( ) => {
257
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneSpy )
255
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
258
256
259
257
const browsersReady = sinon . spy ( )
260
258
server . on ( 'browsers_ready' , browsersReady )
@@ -276,43 +274,28 @@ describe('server', () => {
276
274
} )
277
275
}
278
276
279
- it ( '1 on load errors' , async ( ) => {
280
- mockProcess ( process )
277
+ beforeEach ( ( ) => {
278
+ doneStub . callsFake ( ( exitCode ) => resolveExitCode ( exitCode ) )
279
+ } )
281
280
282
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
283
- resolveExitCode ( exitCode )
284
- } )
281
+ it ( '1 on load errors' , async ( ) => {
282
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
285
283
server . loadErrors . push ( [ 'TestError' , 'Test' ] )
286
284
fileListOnResolve ( )
287
285
288
- function mockProcess ( process ) {
289
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
290
- }
291
-
292
286
expect ( await exitCode ( ) ) . to . have . equal ( 1 )
293
287
} )
294
288
295
289
it ( 'given on run_complete' , async ( ) => {
296
- mockProcess ( process )
297
-
298
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
299
- resolveExitCode ( exitCode )
300
- } )
290
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
301
291
302
292
server . emit ( 'run_complete' , browserCollection , { exitCode : 15 } )
303
293
304
- function mockProcess ( process ) {
305
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
306
- }
307
294
expect ( await exitCode ( ) ) . to . have . equal ( 15 )
308
295
} )
309
296
310
297
it ( 'given on run_complete with exit event listener (15)' , async ( ) => {
311
- mockProcess ( process )
312
-
313
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
314
- resolveExitCode ( exitCode )
315
- } )
298
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
316
299
317
300
// last non-zero exit code will be taken
318
301
server . on ( 'exit' , ( done ) => {
@@ -328,18 +311,11 @@ describe('server', () => {
328
311
// Provided run_complete exitCode will be overridden by exit listeners
329
312
server . emit ( 'run_complete' , browserCollection , { exitCode : 5 } )
330
313
331
- function mockProcess ( process ) {
332
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
333
- }
334
314
expect ( await exitCode ( ) ) . to . have . equal ( 15 )
335
315
} )
336
316
337
317
it ( 'given on run_complete with exit event listener (0)' , async ( ) => {
338
- mockProcess ( process )
339
-
340
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
341
- resolveExitCode ( exitCode )
342
- } )
318
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
343
319
344
320
// exit listeners can't set exit code back to 0
345
321
server . on ( 'exit' , ( done ) => {
@@ -348,37 +324,23 @@ describe('server', () => {
348
324
349
325
server . emit ( 'run_complete' , browserCollection , { exitCode : 15 } )
350
326
351
- function mockProcess ( process ) {
352
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
353
- }
354
327
expect ( await exitCode ( ) ) . to . have . equal ( 15 )
355
328
} )
356
329
357
330
it ( '1 on run_complete with exit event listener throws' , async ( ) => {
358
- mockProcess ( process )
359
-
360
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
361
- resolveExitCode ( exitCode )
362
- } )
331
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
363
332
364
333
server . on ( 'exit' , ( done ) => {
365
334
throw new Error ( 'async error from exit event listener' )
366
335
} )
367
336
368
337
server . emit ( 'run_complete' , browserCollection , { exitCode : 0 } )
369
338
370
- function mockProcess ( process ) {
371
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
372
- }
373
339
expect ( await exitCode ( ) ) . to . have . equal ( 1 )
374
340
} )
375
341
376
342
it ( '1 on run_complete with exit event listener rejects' , async ( ) => {
377
- mockProcess ( process )
378
-
379
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
380
- resolveExitCode ( exitCode )
381
- } )
343
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
382
344
383
345
function onExit ( done ) {
384
346
// Need to remove listener to prevent endless loop via unhandledRejection handler
@@ -390,71 +352,40 @@ describe('server', () => {
390
352
391
353
server . emit ( 'run_complete' , browserCollection , { exitCode : 0 } )
392
354
393
- function mockProcess ( process ) {
394
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
395
- }
396
355
expect ( await exitCode ( ) ) . to . have . equal ( 1 )
397
356
} )
398
357
399
358
it ( '0 on server stop' , async ( ) => {
400
- mockProcess ( process )
401
-
402
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
403
- resolveExitCode ( exitCode )
404
- } )
359
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
405
360
406
361
server . stop ( )
407
362
408
- function mockProcess ( process ) {
409
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
410
- }
411
363
expect ( await exitCode ( ) ) . to . have . equal ( 0 )
412
364
} )
413
365
414
366
it ( '1 on browser_process_failure (singleRunBrowserNotCaptured)' , async ( ) => {
415
- mockProcess ( process )
416
-
417
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
418
- resolveExitCode ( exitCode )
419
- } )
367
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
420
368
421
369
server . emit ( 'browser_process_failure' , { id : 'fake' } )
422
370
423
- function mockProcess ( process ) {
424
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
425
- }
426
371
expect ( await exitCode ( ) ) . to . have . equal ( 1 )
427
372
} )
428
373
429
374
it ( '0 on browser_complete_with_no_more_retries' , async ( ) => {
430
- mockProcess ( process )
431
-
432
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
433
- resolveExitCode ( exitCode )
434
- } )
375
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
435
376
436
377
server . emit ( 'browser_complete_with_no_more_retries' , { id : 'fake' , remove : ( ) => { } } )
437
378
438
- function mockProcess ( process ) {
439
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
440
- }
441
379
expect ( await exitCode ( ) ) . to . have . equal ( 0 )
442
380
} )
443
381
444
382
it ( '1 on browser_complete_with_no_more_retries with config.failOnEmptyTestSuite' , async ( ) => {
445
- mockProcess ( process )
446
-
447
383
mockConfig . failOnEmptyTestSuite = true
448
384
449
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , ( exitCode ) => {
450
- resolveExitCode ( exitCode )
451
- } )
385
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
452
386
453
387
server . emit ( 'browser_complete_with_no_more_retries' , { id : 'fake' , remove : ( ) => { } } )
454
388
455
- function mockProcess ( process ) {
456
- sinon . stub ( process , 'kill' ) . callsFake ( ( pid , ev ) => process . emit ( ev ) )
457
- }
458
389
expect ( await exitCode ( ) ) . to . have . equal ( 1 )
459
390
} )
460
391
} )
@@ -465,7 +396,7 @@ describe('server', () => {
465
396
466
397
beforeEach ( async ( ) => {
467
398
browserCollection = new BrowserCollection ( server )
468
- await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneSpy )
399
+ await server . _start ( mockConfig , mockLauncher , null , mockFileList , browserCollection , mockExecutor , doneStub )
469
400
470
401
mockBrowserSocket = {
471
402
id : 'browser-socket-id' ,
0 commit comments