File tree Expand file tree Collapse file tree 3 files changed +73
-9
lines changed Expand file tree Collapse file tree 3 files changed +73
-9
lines changed Original file line number Diff line number Diff line change @@ -10,4 +10,20 @@ module.exports = {
10
10
} ,
11
11
] ,
12
12
} ,
13
+ overrides : [
14
+ {
15
+ files : [ '*.spec.ts' ] ,
16
+ rules : {
17
+ 'no-restricted-syntax' : [
18
+ 'warn' ,
19
+ {
20
+ message :
21
+ 'Use helper command `launch` to make sure the browsers get cleaned' ,
22
+ selector :
23
+ 'MemberExpression[object.name="puppeteer"][property.name="launch"]' ,
24
+ } ,
25
+ ] ,
26
+ } ,
27
+ } ,
28
+ ] ,
13
29
} ;
Original file line number Diff line number Diff line change @@ -242,6 +242,10 @@ export const mochaHooks = {
242
242
] ,
243
243
244
244
afterEach : ( ) : void => {
245
+ if ( browserCleanups . length > 0 ) {
246
+ throw new Error ( 'A manually launched browser was not closed!' ) ;
247
+ }
248
+
245
249
sinon . restore ( ) ;
246
250
} ,
247
251
} ;
@@ -328,3 +332,53 @@ export const createTimeout = <T>(
328
332
} , n ) ;
329
333
} ) ;
330
334
} ;
335
+
336
+ const browserCleanups : Array < ( ) => Promise < void > > = [ ] ;
337
+
338
+ export const launch = async (
339
+ options : PuppeteerLaunchOptions
340
+ ) : Promise <
341
+ PuppeteerTestState & {
342
+ close : ( ) => Promise < void > ;
343
+ }
344
+ > => {
345
+ const close = async ( ) => {
346
+ let cleanup = browserCleanups . pop ( ) ;
347
+ while ( cleanup ) {
348
+ await cleanup ( ) ;
349
+ cleanup = browserCleanups . pop ( ) ;
350
+ }
351
+ } ;
352
+
353
+ try {
354
+ const browser = await puppeteer . launch ( {
355
+ ...defaultBrowserOptions ,
356
+ ...options ,
357
+ } ) ;
358
+ browserCleanups . push ( async ( ) => {
359
+ browser . close ( ) ;
360
+ } ) ;
361
+
362
+ const context = await browser . createIncognitoBrowserContext ( ) ;
363
+ browserCleanups . push ( async ( ) => {
364
+ context . close ( ) ;
365
+ } ) ;
366
+
367
+ const page = await context . newPage ( ) ;
368
+ browserCleanups . push ( async ( ) => {
369
+ page . close ( ) ;
370
+ } ) ;
371
+
372
+ return {
373
+ ...getTestState ( ) ,
374
+ browser,
375
+ context,
376
+ page,
377
+ close,
378
+ } ;
379
+ } catch ( error ) {
380
+ await close ( ) ;
381
+
382
+ throw error ;
383
+ }
384
+ } ;
Original file line number Diff line number Diff line change @@ -24,6 +24,7 @@ import {HTTPResponse} from 'puppeteer-core/internal/api/HTTPResponse.js';
24
24
25
25
import {
26
26
getTestState ,
27
+ launch ,
27
28
setupTestBrowserHooks ,
28
29
setupTestPageAndContextHooks ,
29
30
} from './mocha-utils.js' ;
@@ -823,15 +824,9 @@ describe('network', function () {
823
824
} ) ;
824
825
825
826
it ( 'Cross-origin set-cookie' , async ( ) => {
826
- const { httpsServer, puppeteer, defaultBrowserOptions} = getTestState ( ) ;
827
-
828
- const browser = await puppeteer . launch ( {
829
- ...defaultBrowserOptions ,
827
+ const { page, httpsServer, close} = await launch ( {
830
828
ignoreHTTPSErrors : true ,
831
829
} ) ;
832
-
833
- const page = await browser . newPage ( ) ;
834
-
835
830
try {
836
831
await page . goto ( httpsServer . PREFIX + '/empty.html' ) ;
837
832
@@ -855,8 +850,7 @@ describe('network', function () {
855
850
] ) ;
856
851
expect ( response . headers ( ) [ 'set-cookie' ] ) . toBe ( setCookieString ) ;
857
852
} finally {
858
- await page . close ( ) ;
859
- await browser . close ( ) ;
853
+ await close ( ) ;
860
854
}
861
855
} ) ;
862
856
} ) ;
You can’t perform that action at this time.
0 commit comments