diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b67c1e28618..b68d3035d094 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -45,6 +45,7 @@ - `[jest-haste-map]` [**BREAKING**] Recover files correctly after haste name collisions are fixed ([#7329](https://github.com/facebook/jest/pull/7329)) - `[pretty-format]` [**BREAKING**] Omit non-enumerable symbol properties ([#7448](https://github.com/facebook/jest/pull/7448)) - `[*]` [**BREAKING**] Upgrade to Babel 7, dropping support for Babel 6 ([#7016](https://github.com/facebook/jest/pull/7016)) +- `[jest-runner/jest-worker]` Fix missing console output in verbose mode ([#6871](https://github.com/facebook/jest/pull/6871)) - `[expect]` Standardize file naming in `expect` ([#7306](https://github.com/facebook/jest/pull/7306)) - `[jest-each]` Add empty array validation check ([#7249](https://github.com/facebook/jest/pull/7249)) - `[jest-cli]` Interrupt tests if interactive watch plugin key is pressed ([#7222](https://github.com/facebook/jest/pull/7222)) diff --git a/package.json b/package.json index bdae6d287631..6c220bedaed0 100644 --- a/package.json +++ b/package.json @@ -97,11 +97,6 @@ "packages/*", "website", "examples/*" - ], - "nohoist": [ - "**/react-native", - "**/react-native/**", - "examples/react-native/**" ] }, "prettier": { diff --git a/packages/jest-runner/src/index.js b/packages/jest-runner/src/index.js index be967a47fa2a..2488a7870602 100644 --- a/packages/jest-runner/src/index.js +++ b/packages/jest-runner/src/index.js @@ -97,11 +97,14 @@ class TestRunner { // $FlowFixMe: class object is augmented with worker when instantiating. const worker: WorkerInterface = new Worker(TEST_WORKER_PATH, { exposedMethods: ['worker'], - forkOptions: {stdio: 'inherit'}, + forkOptions: {stdio: 'pipe'}, maxRetries: 3, numWorkers: this._globalConfig.maxWorkers, }); + if (worker.getStdout()) worker.getStdout().pipe(process.stdout); + if (worker.getStderr()) worker.getStderr().pipe(process.stderr); + const mutex = throat(this._globalConfig.maxWorkers); // Send test suites to workers continuously instead of all at once to track diff --git a/packages/jest-worker/package.json b/packages/jest-worker/package.json index 5506a0d7160e..aa0348a9bc38 100644 --- a/packages/jest-worker/package.json +++ b/packages/jest-worker/package.json @@ -8,7 +8,8 @@ "license": "MIT", "main": "build/index.js", "dependencies": { - "merge-stream": "^1.0.1" + "merge-stream": "^1.0.1", + "supports-color": "^5.5.0" }, "engines": { "node": ">= 6" diff --git a/packages/jest-worker/src/workers/ChildProcessWorker.js b/packages/jest-worker/src/workers/ChildProcessWorker.js index ddff2ad348b3..4a49eab59fe6 100644 --- a/packages/jest-worker/src/workers/ChildProcessWorker.js +++ b/packages/jest-worker/src/workers/ChildProcessWorker.js @@ -24,6 +24,8 @@ import type {Readable} from 'stream'; import type {ChildMessage, OnEnd, OnStart, WorkerOptions} from '../types'; +import supportsColor from 'supports-color'; + /** * This class wraps the child process and provides a nice interface to * communicate with. It takes care of: @@ -54,15 +56,21 @@ export default class ChildProcessWorker implements WorkerInterface { } initialize() { + const forceColor = supportsColor.stdout ? {FORCE_COLOR: '1'} : {}; const child = childProcess.fork( require.resolve('./processChild'), // $FlowFixMe: Flow does not work well with Object.assign. Object.assign( { cwd: process.cwd(), - env: Object.assign({}, process.env, { - JEST_WORKER_ID: this._options.workerId, - }), + env: Object.assign( + {}, + process.env, + { + JEST_WORKER_ID: this._options.workerId, + }, + forceColor, + ), // Suppress --debug / --inspect flags while preserving others (like --harmony). execArgv: process.execArgv.filter(v => !/^--(debug|inspect)/.test(v)), silent: true, diff --git a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js index 5e328bb666f0..6ec956e90fd6 100644 --- a/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js +++ b/packages/jest-worker/src/workers/__tests__/ChildProcessWorker.test.js @@ -10,6 +10,7 @@ /* eslint-disable no-new */ import EventEmitter from 'events'; +import supportsColor from 'supports-color'; import { CHILD_MESSAGE_CALL, @@ -64,7 +65,9 @@ it('passes fork options down to child_process.fork, adding the defaults', () => expect(childProcess.fork.mock.calls[0][0]).toBe(child); expect(childProcess.fork.mock.calls[0][1]).toEqual({ cwd: '/tmp', // Overridden default option. - env: process.env, // Default option. + env: Object.assign({}, process.env, { + FORCE_COLOR: supportsColor.stdout ? '1' : undefined, + }), // Default option. execArgv: ['-p'], // Filtered option. execPath: 'hello', // Added option. silent: true, // Default option.