@@ -18,6 +18,7 @@ import {makeGlobalConfig, makeProjectConfig} from '@jest/test-utils';
1818import * as transform from '@jest/transform' ;
1919import { createTestScheduler } from '../TestScheduler' ;
2020import * as testSchedulerHelper from '../testSchedulerHelper' ;
21+ import * as runGlobalHook from '../runGlobalHook' ;
2122
2223jest
2324 . mock ( 'ci-info' , ( ) => ( { GITHUB_ACTIONS : true } ) )
3536 __esModule : true ,
3637 ...jest . requireActual ( '@jest/transform' ) ,
3738 } ;
38- } ) ;
39+ } )
40+ . mock ( 'exit-x' , ( ) => ( { __esModule : true , default : jest . fn ( ) } ) ) ;
3941const mockSerialRunner = {
4042 isSerial : true ,
4143 runTests : jest . fn ( ) ,
@@ -53,10 +55,13 @@ jest.mock('jest-runner-parallel', () => jest.fn(() => mockParallelRunner), {
5355
5456const spyShouldRunInBand = jest . spyOn ( testSchedulerHelper , 'shouldRunInBand' ) ;
5557
58+ const spyRunGlobalHook = jest . spyOn ( runGlobalHook , 'default' ) ;
59+
5660beforeEach ( ( ) => {
5761 mockSerialRunner . runTests . mockClear ( ) ;
5862 mockParallelRunner . runTests . mockClear ( ) ;
5963 spyShouldRunInBand . mockClear ( ) ;
64+ spyRunGlobalHook . mockClear ( ) ;
6065} ) ;
6166
6267describe ( 'reporters' , ( ) => {
@@ -449,6 +454,42 @@ test('should bail after `n` failures', async () => {
449454 expect ( setState ) . toHaveBeenCalledWith ( { interrupted : true } ) ;
450455} ) ;
451456
457+ test ( 'should bail after `n` failures and perform global teardown' , async ( ) => {
458+ const scheduler = await createTestScheduler (
459+ makeGlobalConfig ( { bail : 3 } ) ,
460+ { } ,
461+ { } ,
462+ ) ;
463+ const test = {
464+ context : {
465+ config : makeProjectConfig ( {
466+ moduleFileExtensions : [ '.js' ] ,
467+ rootDir : './' ,
468+ runner : 'jest-runner-serial' ,
469+ transform : [ ] ,
470+ } ) ,
471+ hasteFS : {
472+ matchFiles : jest . fn ( ( ) => [ ] ) ,
473+ } ,
474+ } ,
475+ path : './test/path.js' ,
476+ } ;
477+
478+ const tests = [ test ] ;
479+ const setState = jest . fn ( ) ;
480+ await scheduler . scheduleTests ( tests , {
481+ isInterrupted : jest . fn ( ) ,
482+ isWatchMode : ( ) => false ,
483+ setState,
484+ } ) ;
485+ await mockSerialRunner . runTests . mock . calls [ 0 ] [ 3 ] ( test , {
486+ numFailingTests : 3 ,
487+ snapshot : { } ,
488+ testResults : [ { } ] ,
489+ } ) ;
490+ expect ( spyRunGlobalHook . mock . calls [ 0 ] [ 0 ] . moduleName ) . toBe ( 'globalTeardown' ) ;
491+ } ) ;
492+
452493test ( 'should not bail if less than `n` failures' , async ( ) => {
453494 const scheduler = await createTestScheduler (
454495 makeGlobalConfig ( { bail : 2 } ) ,
0 commit comments