From 3d3176cc713c1fa82f91cec861ca9272fa87d959 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Wed, 2 Dec 2020 01:52:15 +0100 Subject: [PATCH] chore: convert jest-runner to ESM (#10900) --- CHANGELOG.md | 1 + e2e/transform/transform-runner/runner.ts | 1 + packages/jest-core/src/TestScheduler.ts | 17 ++-- .../src/__tests__/SearchSource.test.ts | 2 +- packages/jest-runner/src/index.ts | 89 +++++++++---------- 5 files changed, 52 insertions(+), 58 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5eb449be3668..cfd8a5b022bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ - `[jest-resolve]` [**BREAKING**] Migrate to ESM ([#10688](https://github.com/facebook/jest/pull/10688)) - `[jest-resolve-dependencies]` [**BREAKING**] Migrate to ESM ([#10876](https://github.com/facebook/jest/pull/10876)) - `[jest-mock]` [**BREAKING**] Migrate to ESM ([#10887](https://github.com/facebook/jest/pull/10887)) +- `[jest-runner]` [**BREAKING**] Migrate to ESM ([#10900](https://github.com/facebook/jest/pull/10900)) - `[jest-util]` No longer checking `enumerable` when adding `process.domain` ([#10862](https://github.com/facebook/jest/pull/10862)) ### Performance diff --git a/e2e/transform/transform-runner/runner.ts b/e2e/transform/transform-runner/runner.ts index 093ffc0242db..2d44fbf0d4ae 100644 --- a/e2e/transform/transform-runner/runner.ts +++ b/e2e/transform/transform-runner/runner.ts @@ -49,6 +49,7 @@ export default class BaseTestRunner { { ancestorTitles: [], duration: 2, + failureDetails: [], failureMessages: [], fullName: 'sample test', location: null, diff --git a/packages/jest-core/src/TestScheduler.ts b/packages/jest-core/src/TestScheduler.ts index cf1846b9f214..4af975dfe96c 100644 --- a/packages/jest-core/src/TestScheduler.ts +++ b/packages/jest-core/src/TestScheduler.ts @@ -28,7 +28,7 @@ import { import {ScriptTransformer} from '@jest/transform'; import type {Config} from '@jest/types'; import {formatExecError} from 'jest-message-util'; -import TestRunner = require('jest-runner'); +import TestRunner, {Test} from 'jest-runner'; import type {Context} from 'jest-runtime'; import snapshot = require('jest-snapshot'); import {interopRequireDefault} from 'jest-util'; @@ -76,7 +76,7 @@ export default class TestScheduler { } async scheduleTests( - tests: Array, + tests: Array, watcher: TestWatcher, ): Promise { const onTestFileStart = this._dispatcher.onTestFileStart.bind( @@ -98,7 +98,7 @@ export default class TestScheduler { const runInBand = shouldRunInBand(tests, timings, this._globalConfig); - const onResult = async (test: TestRunner.Test, testResult: TestResult) => { + const onResult = async (test: Test, testResult: TestResult) => { if (watcher.isInterrupted()) { return Promise.resolve(); } @@ -138,10 +138,7 @@ export default class TestScheduler { return this._bailIfNeeded(contexts, aggregatedResults, watcher); }; - const onFailure = async ( - test: TestRunner.Test, - error: SerializableError, - ) => { + const onFailure = async (test: Test, error: SerializableError) => { if (watcher.isInterrupted()) { return; } @@ -242,7 +239,7 @@ export default class TestScheduler { testRunner.on( 'test-case-result', ([testPath, testCaseResult]) => { - const test: TestRunner.Test = {context, path: testPath}; + const test: Test = {context, path: testPath}; this._dispatcher.onTestCaseResult(test, testCaseResult); }, ), @@ -297,8 +294,8 @@ export default class TestScheduler { private _partitionTests( testRunners: Record, - tests: Array, - ): Record> | null { + tests: Array, + ): Record> | null { if (Object.keys(testRunners).length > 1) { return tests.reduce((testRuns, test) => { const runner = test.context.config.runner; diff --git a/packages/jest-core/src/__tests__/SearchSource.test.ts b/packages/jest-core/src/__tests__/SearchSource.test.ts index 21cfcd1c3b6a..af43fd464335 100644 --- a/packages/jest-core/src/__tests__/SearchSource.test.ts +++ b/packages/jest-core/src/__tests__/SearchSource.test.ts @@ -9,7 +9,7 @@ import * as path from 'path'; import type {Config} from '@jest/types'; import {normalize} from 'jest-config'; -import {Test} from 'jest-runner'; +import type {Test} from 'jest-runner'; import Runtime from 'jest-runtime'; import SearchSource, {SearchResult} from '../SearchSource'; diff --git a/packages/jest-runner/src/index.ts b/packages/jest-runner/src/index.ts index 957bbef9693e..da911414832a 100644 --- a/packages/jest-runner/src/index.ts +++ b/packages/jest-runner/src/index.ts @@ -16,15 +16,15 @@ import Worker, {PromiseWithCustomMessage} from 'jest-worker'; import runTest from './runTest'; import type {SerializableResolver, worker} from './testWorker'; import type { - OnTestFailure as JestOnTestFailure, - OnTestStart as JestOnTestStart, - OnTestSuccess as JestOnTestSuccess, - Test as JestTest, - TestEvents as JestTestEvents, - TestFileEvent as JestTestFileEvent, - TestRunnerContext as JestTestRunnerContext, - TestRunnerOptions as JestTestRunnerOptions, - TestWatcher as JestTestWatcher, + OnTestFailure, + OnTestStart, + OnTestSuccess, + Test, + TestEvents, + TestFileEvent, + TestRunnerContext, + TestRunnerOptions, + TestWatcher, WatcherState, } from './types'; @@ -34,40 +34,37 @@ interface WorkerInterface extends Worker { worker: typeof worker; } -declare namespace TestRunner { - export type Test = JestTest; - export type OnTestFailure = JestOnTestFailure; - export type OnTestStart = JestOnTestStart; - export type OnTestSuccess = JestOnTestSuccess; - export type TestWatcher = JestTestWatcher; - export type TestRunnerContext = JestTestRunnerContext; - export type TestRunnerOptions = JestTestRunnerOptions; - export type TestFileEvent = JestTestFileEvent; -} +export type { + Test, + OnTestFailure, + OnTestStart, + OnTestSuccess, + TestWatcher, + TestRunnerContext, + TestRunnerOptions, + TestFileEvent, +} from './types'; -class TestRunner { +export default class TestRunner { private readonly _globalConfig: Config.GlobalConfig; - private readonly _context: JestTestRunnerContext; - private readonly eventEmitter = new Emittery.Typed(); + private readonly _context: TestRunnerContext; + private readonly eventEmitter = new Emittery.Typed(); readonly __PRIVATE_UNSTABLE_API_supportsEventEmitters__: boolean = true; readonly isSerial?: boolean; - constructor( - globalConfig: Config.GlobalConfig, - context?: JestTestRunnerContext, - ) { + constructor(globalConfig: Config.GlobalConfig, context?: TestRunnerContext) { this._globalConfig = globalConfig; this._context = context || {}; } async runTests( - tests: Array, - watcher: JestTestWatcher, - onStart: JestOnTestStart | undefined, - onResult: JestOnTestSuccess | undefined, - onFailure: JestOnTestFailure | undefined, - options: JestTestRunnerOptions, + tests: Array, + watcher: TestWatcher, + onStart: OnTestStart | undefined, + onResult: OnTestSuccess | undefined, + onFailure: OnTestFailure | undefined, + options: TestRunnerOptions, ): Promise { return await (options.serial ? this._createInBandTestRun(tests, watcher, onStart, onResult, onFailure) @@ -81,11 +78,11 @@ class TestRunner { } private async _createInBandTestRun( - tests: Array, - watcher: JestTestWatcher, - onStart?: JestOnTestStart, - onResult?: JestOnTestSuccess, - onFailure?: JestOnTestFailure, + tests: Array, + watcher: TestWatcher, + onStart?: OnTestStart, + onResult?: OnTestSuccess, + onFailure?: OnTestFailure, ) { process.env.JEST_WORKER_ID = '1'; const mutex = throat(1); @@ -97,7 +94,7 @@ class TestRunner { if (watcher.isInterrupted()) { throw new CancelRun(); } - let sendMessageToJest: JestTestFileEvent; + let sendMessageToJest: TestFileEvent; // Remove `if(onStart)` in Jest 27 if (onStart) { @@ -152,11 +149,11 @@ class TestRunner { } private async _createParallelTestRun( - tests: Array, - watcher: JestTestWatcher, - onStart?: JestOnTestStart, - onResult?: JestOnTestSuccess, - onFailure?: JestOnTestFailure, + tests: Array, + watcher: TestWatcher, + onStart?: OnTestStart, + onResult?: OnTestSuccess, + onFailure?: OnTestFailure, ) { const resolvers: Map = new Map(); for (const test of tests) { @@ -187,7 +184,7 @@ class TestRunner { // Send test suites to workers continuously instead of all at once to track // the start time of individual tests. - const runTestInWorker = (test: JestTest) => + const runTestInWorker = (test: Test) => mutex(async () => { if (watcher.isInterrupted()) { return Promise.reject(); @@ -225,7 +222,7 @@ class TestRunner { return promise; }); - const onError = async (err: SerializableError, test: JestTest) => { + const onError = async (err: SerializableError, test: Test) => { // Remove `if(onFailure)` in Jest 27 if (onFailure) { await onFailure(test, err); @@ -290,5 +287,3 @@ class CancelRun extends Error { this.name = 'CancelRun'; } } - -export = TestRunner;