@@ -416,7 +416,7 @@ for(let i = 0; i < 3; i++) {
416416 ] ) ;
417417 } ) ;
418418
419- it ( "should handle empty array in runAllTests" , async ( ) => {
419+ it ( "should be able to handle empty arrays passed to runAllTests" , async ( ) => {
420420 const result = await page . evaluate ( async ( type ) => {
421421 const runner = await window . FCCTestRunner . createTestRunner ( {
422422 type,
@@ -428,6 +428,72 @@ for(let i = 0; i < 3; i++) {
428428 expect ( result ) . toEqual ( [ ] ) ;
429429 } ) ;
430430
431+ it ( "should run the afterAll hook after running all tests" , async ( ) => {
432+ const result = await page . evaluate ( async ( type ) => {
433+ const runner = await window . FCCTestRunner . createTestRunner ( {
434+ type,
435+ hooks : {
436+ beforeAll : "globalThis.x = 0;" ,
437+ afterAll : "globalThis.x = 1;" ,
438+ } ,
439+ } ) ;
440+
441+ // Individual tests do not trigger the afterAll hook, but runAllTests
442+ // does.
443+ const initial = await runner . runAllTests ( [ "assert.equal(x, 0);" ] ) ;
444+
445+ // Check that afterAll ran
446+ const after = await runner . runTest ( "assert.equal(x, 1);" ) ;
447+
448+ return [ initial , after ] ;
449+ } , type ) ;
450+
451+ expect ( result ) . toEqual ( [ [ { pass : true } ] , { pass : true } ] ) ;
452+ } ) ;
453+
454+ it ( "should run the afterAll hook even if a test fails" , async ( ) => {
455+ const result = await page . evaluate ( async ( type ) => {
456+ const runner = await window . FCCTestRunner . createTestRunner ( {
457+ type,
458+ hooks : {
459+ beforeAll : "globalThis.x = 0;" ,
460+ afterAll : "globalThis.x = 1;" ,
461+ } ,
462+ } ) ;
463+
464+ // Run a failing test
465+ await runner . runAllTests ( [
466+ "assert.equal(x, 0);" ,
467+ "assert.equal(1, 2);" , // This should fail
468+ ] ) ;
469+
470+ // Check that afterAll ran
471+ return runner . runTest ( "assert.equal(x, 1);" ) ;
472+ } , type ) ;
473+
474+ expect ( result ) . toEqual ( { pass : true } ) ;
475+ } ) ;
476+
477+ it ( "should console.error the error if the afterAll hook fails" , async ( ) => {
478+ expect . assertions ( 2 ) ;
479+ page . once ( "console" , ( msg ) => {
480+ expect ( msg . type ( ) ) . toBe ( "error" ) ;
481+ } ) ;
482+
483+ const result = await page . evaluate ( async ( type ) => {
484+ const runner = await window . FCCTestRunner . createTestRunner ( {
485+ type,
486+ hooks : {
487+ afterAll : "throw new Error('afterAll error');" ,
488+ } ,
489+ } ) ;
490+
491+ return runner . runAllTests ( [ "assert.equal(1, 1);" ] ) ;
492+ } , type ) ;
493+
494+ expect ( result ) . toEqual ( [ { pass : true } ] ) ;
495+ } ) ;
496+
431497 it ( "should support top-level await in tests" , async ( ) => {
432498 const result = await page . evaluate ( async ( type ) => {
433499 const runner = await window . FCCTestRunner . createTestRunner ( {
0 commit comments