diff --git a/CHANGELOG.md b/CHANGELOG.md index 8052d1334837..b6ce7e310f0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Fixes +- `[jest-jasmine2]` Don't run `beforeAll` / `afterAll` in skipped describe block ([#9931](https://github.com/facebook/jest/pull/9931)) + ### Chore & Maintenance ### Performance diff --git a/e2e/__tests__/skipBeforeAfterAll.test.ts b/e2e/__tests__/skipBeforeAfterAll.test.ts new file mode 100644 index 000000000000..4e1d0f74efa2 --- /dev/null +++ b/e2e/__tests__/skipBeforeAfterAll.test.ts @@ -0,0 +1,58 @@ +/** + * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +let hasBeforeAllRun = false; +let hasAfterAllRun = false; + +describe.skip('in describe.skip', () => { + describe('in describe', () => { + beforeAll(() => { + hasBeforeAllRun = true; + }); + + afterAll(() => { + hasAfterAllRun = true; + }); + + test('it should be skipped', () => { + throw new Error('This should never happen'); + }); + }); +}); + +test('describe.skip should not run beforeAll', () => { + expect(hasBeforeAllRun).toBe(false); +}); + +test('describe.skip should not run afterAll', () => { + expect(hasAfterAllRun).toBe(false); +}); + +let hasBeforeAllRun2 = false; +let hasAfterAllRun2 = false; + +describe('in describe', () => { + beforeAll(() => { + hasBeforeAllRun2 = true; + }); + + afterAll(() => { + hasAfterAllRun2 = true; + }); + + test.skip('it should be skipped', () => { + throw new Error('This should never happen'); + }); +}); + +test('describe having only skipped test should not run beforeAll', () => { + expect(hasBeforeAllRun2).toBe(false); +}); + +test('describe having only skipped test should not run afterAll', () => { + expect(hasAfterAllRun2).toBe(false); +}); diff --git a/packages/jest-jasmine2/src/treeProcessor.ts b/packages/jest-jasmine2/src/treeProcessor.ts index 5bd4eeebe255..e46b9abfaca8 100644 --- a/packages/jest-jasmine2/src/treeProcessor.ts +++ b/packages/jest-jasmine2/src/treeProcessor.ts @@ -23,7 +23,7 @@ export type TreeNode = { onException: (error: Error) => void; sharedUserContext: () => any; children?: Array; -} & Pick; +} & Pick; export default function treeProcessor(options: Options): void { const { @@ -64,11 +64,11 @@ export default function treeProcessor(options: Options): void { }; } - function hasEnabledTest(node: TreeNode): boolean { + function hasNoEnabledTest(node: TreeNode): boolean { if (node.children) { - return node.children.some(hasEnabledTest); + return node.children.every(hasNoEnabledTest); } - return !node.disabled; + return node.disabled || node.markedPending; } function wrapChildren(node: TreeNode, enabled: boolean) { @@ -78,7 +78,7 @@ export default function treeProcessor(options: Options): void { const children = node.children.map(child => ({ fn: getNodeHandler(child, enabled), })); - if (!hasEnabledTest(node)) { + if (hasNoEnabledTest(node)) { return children; } return node.beforeAllFns.concat(children).concat(node.afterAllFns);