diff --git a/CHANGELOG.md b/CHANGELOG.md index a95862c27536..1d3361b7956b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ - `[jest-config]` [**BREAKING**] Set default display name color based on runner ([#8689](https://github.com/facebook/jest/pull/8689)) - `[jest-diff]` Add options for colors and symbols ([#8841](https://github.com/facebook/jest/pull/8841)) - `[@jest/test-result]` Create method to create empty `TestResult` ([#8867](https://github.com/facebook/jest/pull/8867)) +- `[jest-runner]` [**BREAKING**] Run transforms over `testRunnner` ([#8823](https://github.com/facebook/jest/pull/8823)) ### Fixes diff --git a/e2e/__tests__/transform.test.ts b/e2e/__tests__/transform.test.ts index a62524d3640a..0c0af8d8b069 100644 --- a/e2e/__tests__/transform.test.ts +++ b/e2e/__tests__/transform.test.ts @@ -185,3 +185,14 @@ describe('transformer-config', () => { expect(stdout).toMatchSnapshot(); }); }); + +describe('transform-testrunner', () => { + const dir = path.resolve(__dirname, '../transform/transform-testrunner'); + + it('should transform testRunner', () => { + const {json, stderr} = runWithJson(dir, ['--no-cache']); + expect(stderr).toMatch(/PASS/); + expect(json.success).toBe(true); + expect(json.numPassedTests).toBe(1); + }); +}); diff --git a/e2e/babel-plugin-jest-hoist/package.json b/e2e/babel-plugin-jest-hoist/package.json index ab80492fd75d..933ebcf76fde 100644 --- a/e2e/babel-plugin-jest-hoist/package.json +++ b/e2e/babel-plugin-jest-hoist/package.json @@ -7,6 +7,10 @@ }, "jest": { "automock": true, - "testEnvironment": "node" + "testEnvironment": "node", + "transformIgnorePatterns": [ + "jest-jasmine2", + "jest-circus" + ] } } diff --git a/e2e/coverage-transform-instrumented/package.json b/e2e/coverage-transform-instrumented/package.json index e4356a9f2ea9..7c33459a126d 100644 --- a/e2e/coverage-transform-instrumented/package.json +++ b/e2e/coverage-transform-instrumented/package.json @@ -4,6 +4,11 @@ "transform": { "^.+\\.(js)$": "/preprocessor.js" }, + "transformIgnorePatterns": [ + "jest-jasmine2", + "jest-each", + "jest-circus" + ], "testRegex": "/__tests__/.*\\.(js)$", "testEnvironment": "node", "moduleFileExtensions": [ diff --git a/e2e/transform-linked-modules/package.json b/e2e/transform-linked-modules/package.json index 0887a1756750..19af9caff092 100644 --- a/e2e/transform-linked-modules/package.json +++ b/e2e/transform-linked-modules/package.json @@ -4,7 +4,10 @@ "transformIgnorePatterns": [ "/node_modules/", "/__tests__", - "/ignored/" + "/ignored/", + "jest-jasmine2", + "jest-each", + "jest-circus" ], "transform": { "^.+\\.js$": "/preprocessor.js" diff --git a/e2e/transform/babel-jest-ignored/babel.config.js b/e2e/transform/babel-jest-ignored/babel.config.js index 7178989f46c0..b2779a441554 100644 --- a/e2e/transform/babel-jest-ignored/babel.config.js +++ b/e2e/transform/babel-jest-ignored/babel.config.js @@ -5,4 +5,6 @@ * LICENSE file in the root directory of this source tree. */ -module.exports = {only: ['blablabla']}; +module.exports = { + only: ['blablabla', /jest-jasmine2/, /jest-circus/, /jest-each/], +}; diff --git a/e2e/transform/multiple-transformers/package.json b/e2e/transform/multiple-transformers/package.json index 393763823ac8..922bda4e5685 100644 --- a/e2e/transform/multiple-transformers/package.json +++ b/e2e/transform/multiple-transformers/package.json @@ -5,6 +5,7 @@ "^.+\\.js$": "/jsPreprocessor.js", "^.+\\.svg$": "/filePreprocessor.js" }, + "transformIgnorePatterns": ["jest-jasmine2", "jest-circus"], "testEnvironment": "node" }, "dependencies": { diff --git a/e2e/transform/transform-testrunner/__tests__/add.test.js b/e2e/transform/transform-testrunner/__tests__/add.test.js new file mode 100644 index 000000000000..10dca79b8672 --- /dev/null +++ b/e2e/transform/transform-testrunner/__tests__/add.test.js @@ -0,0 +1,10 @@ +/** + * 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. + */ + +it('should add two numbers', () => { + expect(1 + 1).toBe(2); +}); diff --git a/e2e/transform/transform-testrunner/babel.config.js b/e2e/transform/transform-testrunner/babel.config.js new file mode 100644 index 000000000000..5e1e38eebb8d --- /dev/null +++ b/e2e/transform/transform-testrunner/babel.config.js @@ -0,0 +1,18 @@ +/** + * 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. + */ + +module.exports = { + presets: [ + ['@babel/preset-typescript'], + [ + '@babel/preset-env', + { + targets: {node: 6}, + }, + ], + ], +}; diff --git a/e2e/transform/transform-testrunner/package.json b/e2e/transform/transform-testrunner/package.json new file mode 100644 index 000000000000..9386da74e3dd --- /dev/null +++ b/e2e/transform/transform-testrunner/package.json @@ -0,0 +1,10 @@ +{ + "jest": { + "rootDir": "./", + "testRunner": "/test-runner.ts" + }, + "dependencies": { + "@babel/preset-env": "^7.0.0", + "@babel/preset-typescript": "^7.0.0" + } +} diff --git a/e2e/transform/transform-testrunner/test-runner.ts b/e2e/transform/transform-testrunner/test-runner.ts new file mode 100644 index 000000000000..082ab382bf62 --- /dev/null +++ b/e2e/transform/transform-testrunner/test-runner.ts @@ -0,0 +1,34 @@ +/** + * 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. + */ +import {Config} from '@jest/types'; +import {JestEnvironment} from '@jest/environment'; +import Runtime from 'jest-runtime'; +import {TestResult, createEmptyTestResult} from '@jest/test-result'; + +export default async function testRunner( + globalConfig: Config.GlobalConfig, + config: Config.ProjectConfig, + environment: JestEnvironment, + runtime: Runtime, + testPath: string +): Promise { + return { + ...createEmptyTestResult(), + numPassingTests: 1, + testFilePath: testPath, + testResults: [ + { + ancestorTitles: [], + duration: 2, + failureMessages: [], + fullName: 'sample test', + status: 'passed', + title: 'sample test', + }, + ], + } as TestResult; +} diff --git a/e2e/transform/transform-testrunner/tsconfig.json b/e2e/transform/transform-testrunner/tsconfig.json new file mode 100644 index 000000000000..174da5dc37bf --- /dev/null +++ b/e2e/transform/transform-testrunner/tsconfig.json @@ -0,0 +1,6 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "module": "commonjs", + } +} diff --git a/packages/jest-runner/package.json b/packages/jest-runner/package.json index 3aefedd43667..0ba77567e539 100644 --- a/packages/jest-runner/package.json +++ b/packages/jest-runner/package.json @@ -13,6 +13,7 @@ "@jest/console": "^24.7.1", "@jest/environment": "^24.9.0", "@jest/test-result": "^24.9.0", + "@jest/transform": "^24.9.0", "@jest/types": "^24.9.0", "chalk": "^2.4.2", "exit": "^0.1.2", diff --git a/packages/jest-runner/src/runTest.ts b/packages/jest-runner/src/runTest.ts index a238c743bfaf..4a85803ac0c5 100644 --- a/packages/jest-runner/src/runTest.ts +++ b/packages/jest-runner/src/runTest.ts @@ -17,6 +17,7 @@ import { getConsoleOutput, } from '@jest/console'; import {JestEnvironment} from '@jest/environment'; +import {ScriptTransformer} from '@jest/transform'; import RuntimeClass = require('jest-runtime'); import * as fs from 'graceful-fs'; import {ErrorWithStack, interopRequireDefault, setGlobal} from 'jest-util'; @@ -102,13 +103,17 @@ async function runTestInternal( }); } + const transformer = new ScriptTransformer(config); const TestEnvironment: typeof JestEnvironment = interopRequireDefault( require(testEnvironment), ).default; - const testFramework: TestFramework = - process.env.JEST_CIRCUS === '1' - ? require('jest-circus/runner') // eslint-disable-line import/no-extraneous-dependencies - : require(config.testRunner); + const testFramework: TestFramework = interopRequireDefault( + transformer.requireAndTranspileModule( + process.env.JEST_CIRCUS === '1' + ? 'jest-circus/runner' + : config.testRunner, + ), + ).default; const Runtime: typeof RuntimeClass = config.moduleLoader ? require(config.moduleLoader) : require('jest-runtime'); diff --git a/packages/jest-runner/tsconfig.json b/packages/jest-runner/tsconfig.json index 69c0f3da86e8..d89ad8ced039 100644 --- a/packages/jest-runner/tsconfig.json +++ b/packages/jest-runner/tsconfig.json @@ -15,6 +15,7 @@ {"path": "../jest-resolve"}, {"path": "../jest-runtime"}, {"path": "../jest-test-result"}, + {"path": "../jest-transform"}, {"path": "../jest-types"}, {"path": "../jest-worker"}, {"path": "../jest-util"}