From 6cbd3cbbb4a6d261b65f8eec034146e4be426ff2 Mon Sep 17 00:00:00 2001 From: ychi Date: Thu, 23 Apr 2020 22:56:18 +0200 Subject: [PATCH] noCodeFrame respects noStackTrace (#9866) --- CHANGELOG.md | 1 + .../__snapshots__/messages.test.ts.snap | 21 +++++ .../src/__tests__/messages.test.ts | 78 ++++++++++++++++++- packages/jest-message-util/src/index.ts | 3 +- 4 files changed, 100 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c318022f32db..811c9fde335c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Fixes +- `[jest-message-util]` Code frame printing should respect `--noStackTrace` flag ([#9866](https://github.com/facebook/jest/pull/9866)) - `[jest-runtime]` Support importing CJS from ESM using `import` statements ([#9850](https://github.com/facebook/jest/pull/9850)) - `[jest-runtime]` Support importing parallel dynamic `import`s ([#9858](https://github.com/facebook/jest/pull/9858)) - `[jest-transform]` Improve source map handling when instrumenting transformed code ([#9811](https://github.com/facebook/jest/pull/9811)) diff --git a/packages/jest-message-util/src/__tests__/__snapshots__/messages.test.ts.snap b/packages/jest-message-util/src/__tests__/__snapshots__/messages.test.ts.snap index 490db062e6fb..99256df0436c 100644 --- a/packages/jest-message-util/src/__tests__/__snapshots__/messages.test.ts.snap +++ b/packages/jest-message-util/src/__tests__/__snapshots__/messages.test.ts.snap @@ -35,6 +35,27 @@ exports[`formatStackTrace should strip node internals 1`] = ` " `; +exports[`getConsoleOutput does not print code frame when noCodeFrame = true 1`] = ` +" + at Object. (file.js:1:7) + " +`; + +exports[`getConsoleOutput does not print codeframe when noStackTrace = true 1`] = ` +" + at Object. (file.js:1:7) + " +`; + +exports[`getConsoleOutput prints code frame and stacktrace 1`] = ` +" + > 1 | throw new Error(\\"Whoops!\\"); + | ^ + + at Object. (file.js:1:7) + " +`; + exports[`no codeframe 1`] = ` " ● Test suite failed to run diff --git a/packages/jest-message-util/src/__tests__/messages.test.ts b/packages/jest-message-util/src/__tests__/messages.test.ts index 41a14d0100da..e4b3d3bf8dad 100644 --- a/packages/jest-message-util/src/__tests__/messages.test.ts +++ b/packages/jest-message-util/src/__tests__/messages.test.ts @@ -9,7 +9,7 @@ import {readFileSync} from 'fs'; import slash = require('slash'); import tempy = require('tempy'); -import {formatExecError, formatResultsErrors} from '..'; +import {formatExecError, formatResultsErrors, formatStackTrace} from '..'; const rootDir = tempy.directory(); @@ -289,3 +289,79 @@ it('no stack', () => { expect(message).toMatchSnapshot(); }); + +describe('getConsoleOutput', () => { + it('prints code frame and stacktrace', () => { + readFileSync.mockImplementationOnce(() => 'throw new Error("Whoops!");'); + const message = formatStackTrace( + ` + at Object. (${slash(rootDir)}/file.js:1:7) + at Module._compile (internal/modules/cjs/loader.js:1158:30) + at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10) + at Module.load (internal/modules/cjs/loader.js:1002:32) + at Function.Module._load (internal/modules/cjs/loader.js:901:14) + at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) + `, + { + rootDir, + testMatch: [], + }, + { + noCodeFrame: false, + noStackTrace: false, + }, + 'path_test', + ); + + expect(message).toMatchSnapshot(); + }); + + it('does not print code frame when noCodeFrame = true', () => { + readFileSync.mockImplementationOnce(() => 'throw new Error("Whoops!");'); + const message = formatStackTrace( + ` + at Object. (${slash(rootDir)}/file.js:1:7) + at Module._compile (internal/modules/cjs/loader.js:1158:30) + at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10) + at Module.load (internal/modules/cjs/loader.js:1002:32) + at Function.Module._load (internal/modules/cjs/loader.js:901:14) + at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) + `, + { + rootDir, + testMatch: [], + }, + { + noCodeFrame: true, + noStackTrace: false, + }, + 'path_test', + ); + + expect(message).toMatchSnapshot(); + }); + + it('does not print codeframe when noStackTrace = true', () => { + readFileSync.mockImplementationOnce(() => 'throw new Error("Whoops!");'); + const message = formatStackTrace( + ` + at Object. (${slash(rootDir)}/file.js:1:7) + at Module._compile (internal/modules/cjs/loader.js:1158:30) + at Object.Module._extensions..js (internal/modules/cjs/loader.js:1178:10) + at Module.load (internal/modules/cjs/loader.js:1002:32) + at Function.Module._load (internal/modules/cjs/loader.js:901:14) + at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12) + `, + { + rootDir, + testMatch: [], + }, + { + noStackTrace: true, + }, + 'path_test', + ); + + expect(message).toMatchSnapshot(); + }); +}); diff --git a/packages/jest-message-util/src/index.ts b/packages/jest-message-util/src/index.ts index b3c1fbb5967b..e205c823d648 100644 --- a/packages/jest-message-util/src/index.ts +++ b/packages/jest-message-util/src/index.ts @@ -283,9 +283,8 @@ export const formatStackTrace = ( ? slash(path.relative(config.rootDir, testPath)) : null; - if (!options.noCodeFrame) { + if (!options.noStackTrace && !options.noCodeFrame) { const topFrame = getTopFrame(lines); - if (topFrame) { const {column, file: filename, line} = topFrame;