diff --git a/CHANGELOG.md b/CHANGELOG.md index 37520e373b89..c81cafaba8c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -104,6 +104,8 @@ ([#5888](https://github.com/facebook/jest/pull/5888)) * `[jest-mock]` [**BREAKING**] Replace timestamps with `invocationCallOrder` ([#5867](https://github.com/facebook/jest/pull/5867)) +* `[jest-jasmine2]` Install `sourcemap-support` into normal runtime to catch + runtime errors ([#5945](https://github.com/facebook/jest/pull/5945)) * `[jest-jasmine2]` Added assertion error handling inside `afterAll hook` ([#5884](https://github.com/facebook/jest/pull/5884)) * `[jest-cli]` Remove the notifier actions in case of failure when not in watch diff --git a/integration-tests/__tests__/__snapshots__/globals.test.js.snap b/integration-tests/__tests__/__snapshots__/globals.test.js.snap index 0a79b88e36c2..30496da2c554 100644 --- a/integration-tests/__tests__/__snapshots__/globals.test.js.snap +++ b/integration-tests/__tests__/__snapshots__/globals.test.js.snap @@ -28,7 +28,7 @@ exports[`cannot test with no implementation 1`] = ` 1 | 2 | it('it', () => {}); > 3 | it('it, no implementation'); - | ^ + | ^ 4 | test('test, no implementation'); 5 | @@ -56,7 +56,7 @@ exports[`cannot test with no implementation with expand arg 1`] = ` 1 | 2 | it('it', () => {}); > 3 | it('it, no implementation'); - | ^ + | ^ 4 | test('test, no implementation'); 5 | diff --git a/integration-tests/__tests__/stack_trace.test.js b/integration-tests/__tests__/stack_trace.test.js index dc20cea89f96..d37b5409eca9 100644 --- a/integration-tests/__tests__/stack_trace.test.js +++ b/integration-tests/__tests__/stack_trace.test.js @@ -21,6 +21,7 @@ describe('Stack Trace', () => { expect(stderr).toMatch( /ReferenceError: thisIsARuntimeError is not defined/, ); + expect(stderr).toMatch(/> 10 \| thisIsARuntimeError\(\);/); expect(stderr).toMatch( /\s+at\s(?:.+?)\s\(__tests__\/runtime_error.test\.js/, ); diff --git a/packages/jest-jasmine2/src/index.js b/packages/jest-jasmine2/src/index.js index 785fa5cf0548..606d0c1b857f 100644 --- a/packages/jest-jasmine2/src/index.js +++ b/packages/jest-jasmine2/src/index.js @@ -18,6 +18,7 @@ import path from 'path'; import fs from 'graceful-fs'; import installEach from './each'; import {getCallsite} from 'jest-util'; +import sourcemapSupport from 'source-map-support'; import JasmineReporter from './reporter'; import {install as jasmineAsyncInstall} from './jasmine_async'; @@ -119,29 +120,35 @@ async function jasmine2( runtime.requireModule(config.setupTestFrameworkScriptFile); } + const sourcemapOptions = { + environment: 'node', + handleUncaughtExceptions: false, + retrieveSourceMap: source => { + const sourceMaps = runtime.getSourceMaps(); + const sourceMapSource = sourceMaps && sourceMaps[source]; + + if (sourceMapSource) { + try { + return { + map: JSON.parse(fs.readFileSync(sourceMapSource)), + url: source, + }; + } catch (e) {} + } + return null; + }, + }; + + // For tests runtime .requireInternalModule( require.resolve('source-map-support'), 'source-map-support', ) - .install({ - environment: 'node', - handleUncaughtExceptions: false, - retrieveSourceMap: source => { - const sourceMaps = runtime.getSourceMaps(); - const sourceMapSource = sourceMaps && sourceMaps[source]; - - if (sourceMapSource) { - try { - return { - map: JSON.parse(fs.readFileSync(sourceMapSource)), - url: source, - }; - } catch (e) {} - } - return null; - }, - }); + .install(sourcemapOptions); + + // For runtime errors + sourcemapSupport.install(sourcemapOptions); if (globalConfig.enabledTestsMap) { env.specFilter = spec => {