diff --git a/CHANGELOG.md b/CHANGELOG.md index e6e3e4212286..cfd445063df9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ - `[jest-cli]` Allow specifying `.cjs` and `.mjs` config files by `--config` CLI option ([#9578](https://github.com/facebook/jest/pull/9578)) - `[jest-config]` Ensure pattern of `replacePosixSep` is a string ([#9546]https://github.com/facebook/jest/pull/9546) - `[jest-haste-map]` Fix crash on unix based systems without find ([#9579](https://github.com/facebook/jest/pull/9579)) +- `[jest-jasmine2]` Fix `--testNamePattern` matching with `concurrent` tests ([#9090](https://github.com/facebook/jest/pull/9090)) - `[jest-matcher-utils]` Fix diff highlight of symbol-keyed object. ([#9499](https://github.com/facebook/jest/pull/9499)) - `[@jest/reporters]` Notifications should be fire&forget rather than having a timeout ([#9567](https://github.com/facebook/jest/pull/9567)) - `[jest-resolve]` Fix module identity preservation with symlinks and browser field resolution ([#9511](https://github.com/facebook/jest/pull/9511)) diff --git a/e2e/__tests__/jasmineAsync.test.ts b/e2e/__tests__/jasmineAsync.test.ts index fb869f65cd06..6eaaa864e956 100644 --- a/e2e/__tests__/jasmineAsync.test.ts +++ b/e2e/__tests__/jasmineAsync.test.ts @@ -115,6 +115,19 @@ describe('async jasmine', () => { expect(json.testResults[0].message).toMatch(/concurrent test fails/); }); + it('works with concurrent within a describe block when invoked with testNamePattern', () => { + const {json} = runWithJson('jasmine-async', [ + '--testNamePattern', + 'one concurrent test fails', + 'concurrentWithinDescribe.test.js', + ]); + expect(json.numTotalTests).toBe(2); + expect(json.numPassedTests).toBe(0); + expect(json.numFailedTests).toBe(1); + expect(json.numPendingTests).toBe(1); + expect(json.testResults[0].message).toMatch(/concurrent test fails/); + }); + it("doesn't execute more than 5 tests simultaneously", () => { const {json} = runWithJson('jasmine-async', ['concurrent-many.test.js']); expect(json.numTotalTests).toBe(10); diff --git a/e2e/jasmine-async/__tests__/concurrentWithinDescribe.test.js b/e2e/jasmine-async/__tests__/concurrentWithinDescribe.test.js new file mode 100644 index 000000000000..1e674e10d2e1 --- /dev/null +++ b/e2e/jasmine-async/__tests__/concurrentWithinDescribe.test.js @@ -0,0 +1,13 @@ +/** + * 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. + */ + +'use strict'; + +describe('one', () => { + it.concurrent('concurrent test gets skipped', () => Promise.resolve()); + it.concurrent('concurrent test fails', () => Promise.reject()); +}); diff --git a/packages/jest-jasmine2/src/jasmine/Env.ts b/packages/jest-jasmine2/src/jasmine/Env.ts index e16c48d8a5f6..9c47b20f9c2e 100644 --- a/packages/jest-jasmine2/src/jasmine/Env.ts +++ b/packages/jest-jasmine2/src/jasmine/Env.ts @@ -55,7 +55,7 @@ export default function(j$: Jasmine) { fail: (error: Error | AssertionErrorWithStack) => void; pending: (message: string) => void; afterAll: (afterAllFunction: QueueableFn['fn'], timeout?: number) => void; - fit: (description: string, fn: QueueableFn['fn'], timeout?: number) => void; + fit: (description: string, fn: QueueableFn['fn'], timeout?: number) => Spec; throwingExpectationFailures: () => boolean; randomizeTests: (value: unknown) => void; randomTests: () => boolean; @@ -79,7 +79,7 @@ export default function(j$: Jasmine) { addReporter: (reporterToAdd: Reporter) => void; it: (description: string, fn: QueueableFn['fn'], timeout?: number) => Spec; xdescribe: (description: string, specDefinitions: Function) => Suite; - xit: (description: string, fn: QueueableFn['fn'], timeout?: number) => any; + xit: (description: string, fn: QueueableFn['fn'], timeout?: number) => Spec; beforeAll: (beforeAllFunction: QueueableFn['fn'], timeout?: number) => void; todo: () => Spec; provideFallbackReporter: (reporterToAdd: Reporter) => void; diff --git a/packages/jest-jasmine2/src/jasmineAsyncInstall.ts b/packages/jest-jasmine2/src/jasmineAsyncInstall.ts index e35b2aff293b..a4409251e906 100644 --- a/packages/jest-jasmine2/src/jasmineAsyncInstall.ts +++ b/packages/jest-jasmine2/src/jasmineAsyncInstall.ts @@ -17,6 +17,7 @@ import throat from 'throat'; import isError from './isError'; import {Jasmine} from './types'; import Spec from './jasmine/Spec'; +import {QueueableFn} from './queueRunner'; interface DoneFn { (): void; @@ -141,19 +142,22 @@ function promisifyIt( } function makeConcurrent( - originalFn: Function, + originalFn: ( + description: string, + fn: QueueableFn['fn'], + timeout?: number, + ) => Spec, env: Jasmine['currentEnv_'], mutex: ReturnType, ): Global.ItConcurrentBase { return function(specName, fn, timeout) { - if ( - env != null && - !env.specFilter({getFullName: () => specName || ''} as Spec) - ) { - return originalFn.call(env, specName, () => Promise.resolve(), timeout); + let promise: Promise = Promise.resolve(); + + const spec = originalFn.call(env, specName, () => promise, timeout); + if (env != null && !env.specFilter(spec)) { + return spec; } - let promise: Promise; try { promise = mutex(() => { const promise = fn(); @@ -161,14 +165,14 @@ function makeConcurrent( return promise; } throw new Error( - `Jest: concurrent test "${specName}" must return a Promise.`, + `Jest: concurrent test "${spec.getFullName()}" must return a Promise.`, ); }); } catch (error) { - return originalFn.call(env, specName, () => Promise.reject(error)); + promise = Promise.reject(error); } - return originalFn.call(env, specName, () => promise, timeout); + return spec; }; }