From 65d8d073e894af220171c688813a7f37fe8d6417 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 30 Mar 2019 13:50:35 +0100 Subject: [PATCH 1/9] feat: check for common errors when using the wrong test environment --- CHANGELOG.md | 1 + .../__snapshots__/wrongEnv.test.ts.snap | 85 +++++++++++++++++++ e2e/__tests__/wrongEnv.test.ts | 35 ++++++++ e2e/wrong-env/__tests__/beforeTest.js | 15 ++++ e2e/wrong-env/__tests__/jsdom.js | 16 ++++ e2e/wrong-env/__tests__/node.js | 29 +++++++ e2e/wrong-env/package.json | 3 + packages/jest-message-util/src/index.ts | 39 +++++++-- 8 files changed, 217 insertions(+), 6 deletions(-) create mode 100644 e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap create mode 100644 e2e/__tests__/wrongEnv.test.ts create mode 100644 e2e/wrong-env/__tests__/beforeTest.js create mode 100644 e2e/wrong-env/__tests__/jsdom.js create mode 100644 e2e/wrong-env/__tests__/node.js create mode 100644 e2e/wrong-env/package.json diff --git a/CHANGELOG.md b/CHANGELOG.md index d84b3bce67c9..62e0e641a025 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -340,6 +340,7 @@ - `[pretty-format]` Support React.Suspense ([#8180](https://github.com/facebook/jest/pull/8180)) - `[jest-snapshot]` Indent inline snapshots ([#8198](https://github.com/facebook/jest/pull/8198)) - `[jest-config]` Support colors in `displayName` configuration ([#8025](https://github.com/facebook/jest/pull/8025)) +- `[jest-message-util]` Check for common errors when using the wrong test environment ([#8245](https://github.com/facebook/jest/pull/8245)) ### Fixes diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap new file mode 100644 index 000000000000..8b9e2e9f6451 --- /dev/null +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -0,0 +1,85 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`Wrong globals for environment print useful error for document 1`] = ` +"FAIL __tests__/node.js + ✕ use document + ○ skipped use window + + ● use document + + Jest: You should use a jsdom test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + + ReferenceError: document is not defined + + 14 | + 15 | test('use document', () => { + > 16 | const div = document.createElement('div'); + | ^ + 17 | + 18 | console.log(div); + 19 | + + at Object.document (__tests__/node.js:16:15)" +`; + +exports[`Wrong globals for environment print useful error for unref 1`] = ` +"FAIL __tests__/jsdom.js + ✕ use unref + + ● use unref + + Jest: You should use a node test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + + TypeError: setTimeout(...).unref is not a function + + 11 | + 12 | test('use unref', () => { + > 13 | setTimeout(() => {}, 0).unref(); + | ^ + 14 | + 15 | expect(1).toBe(1); + 16 | }); + + at Object.unref (__tests__/jsdom.js:13:27)" +`; + +exports[`Wrong globals for environment print useful error for window 1`] = ` +"FAIL __tests__/node.js + ✕ use window + ○ skipped use document + + ● use window + + Jest: You should use a jsdom test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + + ReferenceError: window is not defined + + 22 | + 23 | test('use window', () => { + > 24 | const location = window.location; + | ^ + 25 | + 26 | console.log(location); + 27 | + + at Object.window (__tests__/node.js:24:20)" +`; + +exports[`Wrong globals for environment print useful error when it explodes during evaluation 1`] = ` +"FAIL __tests__/beforeTest.js + ● Test suite failed to run + + Jest: You should use a jsdom test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + + ReferenceError: document is not defined + + 11 | /* eslint-env browser */ + 12 | + > 13 | const div = document.createElement('div'); + | ^ + 14 | + 15 | test('stub', () => expect(1).toBe(1)); + 16 | + + at Object.document (__tests__/beforeTest.js:13:13)" +`; diff --git a/e2e/__tests__/wrongEnv.test.ts b/e2e/__tests__/wrongEnv.test.ts new file mode 100644 index 000000000000..9170365b3b44 --- /dev/null +++ b/e2e/__tests__/wrongEnv.test.ts @@ -0,0 +1,35 @@ +/** + * 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 runJest from '../runJest'; +import {extractSummary} from '../Utils'; + +describe('Wrong globals for environment', () => { + it('print useful error for window', () => { + const result = runJest('wrong-env', ['node', '-t=window']); + expect(result.status).toBe(1); + expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + }); + + it('print useful error for document', () => { + const result = runJest('wrong-env', ['node', '-t=document']); + expect(result.status).toBe(1); + expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + }); + + it('print useful error for unref', () => { + const result = runJest('wrong-env', ['jsdom', '-t=unref']); + expect(result.status).toBe(1); + expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + }); + + it('print useful error when it explodes during evaluation', () => { + const result = runJest('wrong-env', ['beforeTest']); + expect(result.status).toBe(1); + expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + }); +}); diff --git a/e2e/wrong-env/__tests__/beforeTest.js b/e2e/wrong-env/__tests__/beforeTest.js new file mode 100644 index 000000000000..b8d69118d78b --- /dev/null +++ b/e2e/wrong-env/__tests__/beforeTest.js @@ -0,0 +1,15 @@ +/** + * 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. + * + * @jest-environment node + * + */ + +/* eslint-env browser */ + +const div = document.createElement('div'); + +test('stub', () => expect(1).toBe(1)); diff --git a/e2e/wrong-env/__tests__/jsdom.js b/e2e/wrong-env/__tests__/jsdom.js new file mode 100644 index 000000000000..f030fbb2b60c --- /dev/null +++ b/e2e/wrong-env/__tests__/jsdom.js @@ -0,0 +1,16 @@ +/** + * 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. + * + * @jest-environment jsdom + */ + +'use strict'; + +test('use unref', () => { + setTimeout(() => {}, 0).unref(); + + expect(1).toBe(1); +}); diff --git a/e2e/wrong-env/__tests__/node.js b/e2e/wrong-env/__tests__/node.js new file mode 100644 index 000000000000..bc8becde278a --- /dev/null +++ b/e2e/wrong-env/__tests__/node.js @@ -0,0 +1,29 @@ +/** + * 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. + * + * @jest-environment node + * + */ + +/* eslint-env browser */ + +'use strict'; + +test('use document', () => { + const div = document.createElement('div'); + + console.log(div); + + expect(1).toBe(1); +}); + +test('use window', () => { + const location = window.location; + + console.log(location); + + expect(1).toBe(1); +}); diff --git a/e2e/wrong-env/package.json b/e2e/wrong-env/package.json new file mode 100644 index 000000000000..586d4ca6b75c --- /dev/null +++ b/e2e/wrong-env/package.json @@ -0,0 +1,3 @@ +{ + "jest": {} +} diff --git a/packages/jest-message-util/src/index.ts b/packages/jest-message-util/src/index.ts index 0b2248daab44..817fc3163b91 100644 --- a/packages/jest-message-util/src/index.ts +++ b/packages/jest-message-util/src/index.ts @@ -92,6 +92,29 @@ const getRenderedCallsite = ( const blankStringRegexp = /^\s*$/; +function checkForCommonEnvironmentErrors(error: string) { + if ( + error.includes('ReferenceError: document is not defined') || + error.includes('ReferenceError: window is not defined') + ) { + return warnAboutWrongTestEnvironment(error, 'jsdom'); + } else if (error.includes('.unref is not a function')) { + return warnAboutWrongTestEnvironment(error, 'node'); + } + + return error; +} + +function warnAboutWrongTestEnvironment(error: string, env: 'jsdom' | 'node') { + return ( + chalk.red( + chalk.bold( + `Jest: You should use a ${env} test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string.\n\n`, + ), + ) + error + ); +} + // ExecError is an error thrown outside of the test suite (not inside an `it` or // `before/after each` hooks). If it's thrown, none of the tests in the file // are executed. @@ -126,6 +149,8 @@ export const formatExecError = ( message = separated.message; } + message = checkForCommonEnvironmentErrors(message); + message = indentAllLines(message, MESSAGE_INDENT); stack = @@ -285,19 +310,21 @@ export const formatStackTrace = ( return `${renderedCallsite}\n${stacktrace}`; }; +type FailedResults = Array<{ + content: string; + result: AssertionResult; +}>; + export const formatResultsErrors = ( testResults: Array, config: StackTraceConfig, options: StackTraceOptions, testPath?: Path, ): string | null => { - type FailedResults = Array<{ - content: string; - result: AssertionResult; - }>; - const failedResults: FailedResults = testResults.reduce((errors, result) => { - result.failureMessages.forEach(content => errors.push({content, result})); + result.failureMessages + .map(checkForCommonEnvironmentErrors) + .forEach(content => errors.push({content, result})); return errors; }, [] as FailedResults); From b86ff645820321f981834a30a24925d65d4f7ba9 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 30 Mar 2019 15:51:36 +0100 Subject: [PATCH 2/9] pr feedback --- e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap | 12 ++++++++---- packages/jest-message-util/src/index.ts | 8 ++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index 8b9e2e9f6451..48b50114e619 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -7,7 +7,8 @@ exports[`Wrong globals for environment print useful error for document 1`] = ` ● use document - Jest: You should use a jsdom test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + Consider using the \\"jsdom\\" test environment. ReferenceError: document is not defined @@ -28,7 +29,8 @@ exports[`Wrong globals for environment print useful error for unref 1`] = ` ● use unref - Jest: You should use a node test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + Consider using the \\"node\\" test environment. TypeError: setTimeout(...).unref is not a function @@ -50,7 +52,8 @@ exports[`Wrong globals for environment print useful error for window 1`] = ` ● use window - Jest: You should use a jsdom test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + Consider using the \\"jsdom\\" test environment. ReferenceError: window is not defined @@ -69,7 +72,8 @@ exports[`Wrong globals for environment print useful error when it explodes durin "FAIL __tests__/beforeTest.js ● Test suite failed to run - Jest: You should use a jsdom test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + Consider using the \\"jsdom\\" test environment. ReferenceError: document is not defined diff --git a/packages/jest-message-util/src/index.ts b/packages/jest-message-util/src/index.ts index 817fc3163b91..200b5d7dea5f 100644 --- a/packages/jest-message-util/src/index.ts +++ b/packages/jest-message-util/src/index.ts @@ -107,10 +107,10 @@ function checkForCommonEnvironmentErrors(error: string) { function warnAboutWrongTestEnvironment(error: string, env: 'jsdom' | 'node') { return ( - chalk.red( - chalk.bold( - `Jest: You should use a ${env} test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string.\n\n`, - ), + chalk.bold.red( + `The error below may be caused by using the wrong test environment, see ${chalk.dim.underline( + 'https://jestjs.io/docs/en/configuration#testenvironment-string', + )}.\nConsider using the "${env}" test environment.\n\n`, ) + error ); } From 03c2e0d24b55b81bd3a74ac8323c2db6e43b139d Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 30 Mar 2019 15:52:57 +0100 Subject: [PATCH 3/9] turn off transform --- e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap | 8 ++++---- e2e/wrong-env/package.json | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index 48b50114e619..4edf5e12bf60 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -20,7 +20,7 @@ exports[`Wrong globals for environment print useful error for document 1`] = ` 18 | console.log(div); 19 | - at Object.document (__tests__/node.js:16:15)" + at Object..test (__tests__/node.js:16:15)" `; exports[`Wrong globals for environment print useful error for unref 1`] = ` @@ -42,7 +42,7 @@ exports[`Wrong globals for environment print useful error for unref 1`] = ` 15 | expect(1).toBe(1); 16 | }); - at Object.unref (__tests__/jsdom.js:13:27)" + at Object..test (__tests__/jsdom.js:13:27)" `; exports[`Wrong globals for environment print useful error for window 1`] = ` @@ -65,7 +65,7 @@ exports[`Wrong globals for environment print useful error for window 1`] = ` 26 | console.log(location); 27 | - at Object.window (__tests__/node.js:24:20)" + at Object..test (__tests__/node.js:24:20)" `; exports[`Wrong globals for environment print useful error when it explodes during evaluation 1`] = ` @@ -85,5 +85,5 @@ exports[`Wrong globals for environment print useful error when it explodes durin 15 | test('stub', () => expect(1).toBe(1)); 16 | - at Object.document (__tests__/beforeTest.js:13:13)" + at Object. (__tests__/beforeTest.js:13:13)" `; diff --git a/e2e/wrong-env/package.json b/e2e/wrong-env/package.json index 586d4ca6b75c..245a418dfd89 100644 --- a/e2e/wrong-env/package.json +++ b/e2e/wrong-env/package.json @@ -1,3 +1,5 @@ { - "jest": {} + "jest": { + "transform": {} + } } From 593ee4f605c1c3b7197533f4f3a55d7fbc48825a Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 30 Mar 2019 16:01:39 +0100 Subject: [PATCH 4/9] fix lint --- e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap | 2 +- e2e/wrong-env/__tests__/beforeTest.js | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index 4edf5e12bf60..e1857b636f1b 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -82,7 +82,7 @@ exports[`Wrong globals for environment print useful error when it explodes durin > 13 | const div = document.createElement('div'); | ^ 14 | - 15 | test('stub', () => expect(1).toBe(1)); + 15 | console.log(div); 16 | at Object. (__tests__/beforeTest.js:13:13)" diff --git a/e2e/wrong-env/__tests__/beforeTest.js b/e2e/wrong-env/__tests__/beforeTest.js index b8d69118d78b..95afb6a35872 100644 --- a/e2e/wrong-env/__tests__/beforeTest.js +++ b/e2e/wrong-env/__tests__/beforeTest.js @@ -12,4 +12,6 @@ const div = document.createElement('div'); +console.log(div); + test('stub', () => expect(1).toBe(1)); From 0fd94c409ccb73f904040c0018f2738a94da0367 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 4 Apr 2019 08:53:08 +0200 Subject: [PATCH 5/9] Revert "turn off transform" This reverts commit fff5c53ecc077e0296cc0f957c01d88b9f208893. --- e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap | 8 ++++---- e2e/wrong-env/package.json | 4 +--- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index e1857b636f1b..fe4dd610e66f 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -20,7 +20,7 @@ exports[`Wrong globals for environment print useful error for document 1`] = ` 18 | console.log(div); 19 | - at Object..test (__tests__/node.js:16:15)" + at Object.document (__tests__/node.js:16:15)" `; exports[`Wrong globals for environment print useful error for unref 1`] = ` @@ -42,7 +42,7 @@ exports[`Wrong globals for environment print useful error for unref 1`] = ` 15 | expect(1).toBe(1); 16 | }); - at Object..test (__tests__/jsdom.js:13:27)" + at Object.unref (__tests__/jsdom.js:13:27)" `; exports[`Wrong globals for environment print useful error for window 1`] = ` @@ -65,7 +65,7 @@ exports[`Wrong globals for environment print useful error for window 1`] = ` 26 | console.log(location); 27 | - at Object..test (__tests__/node.js:24:20)" + at Object.window (__tests__/node.js:24:20)" `; exports[`Wrong globals for environment print useful error when it explodes during evaluation 1`] = ` @@ -85,5 +85,5 @@ exports[`Wrong globals for environment print useful error when it explodes durin 15 | console.log(div); 16 | - at Object. (__tests__/beforeTest.js:13:13)" + at Object.document (__tests__/beforeTest.js:13:13)" `; diff --git a/e2e/wrong-env/package.json b/e2e/wrong-env/package.json index 245a418dfd89..586d4ca6b75c 100644 --- a/e2e/wrong-env/package.json +++ b/e2e/wrong-env/package.json @@ -1,5 +1,3 @@ { - "jest": { - "transform": {} - } + "jest": {} } From 1fb0651d8ec99c5c139c9c8762493370b56563f8 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Thu, 4 Apr 2019 08:54:03 +0200 Subject: [PATCH 6/9] chore: move changelog entry --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62e0e641a025..2b14d26488af 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ ### Features +- `[jest-message-util]` Check for common errors when using the wrong test environment ([#8245](https://github.com/facebook/jest/pull/8245)) + ### Fixes - `[jest-circus]` Fix type ellision of jest-runtime imports ([#9717](https://github.com/facebook/jest/pull/9717)) @@ -340,7 +342,6 @@ - `[pretty-format]` Support React.Suspense ([#8180](https://github.com/facebook/jest/pull/8180)) - `[jest-snapshot]` Indent inline snapshots ([#8198](https://github.com/facebook/jest/pull/8198)) - `[jest-config]` Support colors in `displayName` configuration ([#8025](https://github.com/facebook/jest/pull/8025)) -- `[jest-message-util]` Check for common errors when using the wrong test environment ([#8245](https://github.com/facebook/jest/pull/8245)) ### Fixes From b68f13883c56ba0e3b9e05ac74373ab4c8f3c2b3 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 28 Mar 2020 09:49:46 +0100 Subject: [PATCH 7/9] update test after execa update --- .../__snapshots__/wrongEnv.test.ts.snap | 22 +++++++++---------- e2e/__tests__/wrongEnv.test.ts | 8 +++---- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index fe4dd610e66f..eac4a24e237a 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -12,13 +12,13 @@ exports[`Wrong globals for environment print useful error for document 1`] = ` ReferenceError: document is not defined - 14 | + 14 | 15 | test('use document', () => { > 16 | const div = document.createElement('div'); | ^ - 17 | + 17 | 18 | console.log(div); - 19 | + 19 | at Object.document (__tests__/node.js:16:15)" `; @@ -34,11 +34,11 @@ exports[`Wrong globals for environment print useful error for unref 1`] = ` TypeError: setTimeout(...).unref is not a function - 11 | + 11 | 12 | test('use unref', () => { > 13 | setTimeout(() => {}, 0).unref(); | ^ - 14 | + 14 | 15 | expect(1).toBe(1); 16 | }); @@ -57,13 +57,13 @@ exports[`Wrong globals for environment print useful error for window 1`] = ` ReferenceError: window is not defined - 22 | + 22 | 23 | test('use window', () => { > 24 | const location = window.location; | ^ - 25 | + 25 | 26 | console.log(location); - 27 | + 27 | at Object.window (__tests__/node.js:24:20)" `; @@ -78,12 +78,12 @@ exports[`Wrong globals for environment print useful error when it explodes durin ReferenceError: document is not defined 11 | /* eslint-env browser */ - 12 | + 12 | > 13 | const div = document.createElement('div'); | ^ - 14 | + 14 | 15 | console.log(div); - 16 | + 16 | at Object.document (__tests__/beforeTest.js:13:13)" `; diff --git a/e2e/__tests__/wrongEnv.test.ts b/e2e/__tests__/wrongEnv.test.ts index 9170365b3b44..c83e790f8394 100644 --- a/e2e/__tests__/wrongEnv.test.ts +++ b/e2e/__tests__/wrongEnv.test.ts @@ -11,25 +11,25 @@ import {extractSummary} from '../Utils'; describe('Wrong globals for environment', () => { it('print useful error for window', () => { const result = runJest('wrong-env', ['node', '-t=window']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(extractSummary(result.stderr).rest).toMatchSnapshot(); }); it('print useful error for document', () => { const result = runJest('wrong-env', ['node', '-t=document']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(extractSummary(result.stderr).rest).toMatchSnapshot(); }); it('print useful error for unref', () => { const result = runJest('wrong-env', ['jsdom', '-t=unref']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(extractSummary(result.stderr).rest).toMatchSnapshot(); }); it('print useful error when it explodes during evaluation', () => { const result = runJest('wrong-env', ['beforeTest']); - expect(result.status).toBe(1); + expect(result.exitCode).toBe(1); expect(extractSummary(result.stderr).rest).toMatchSnapshot(); }); }); From 012dbbc8f287a324795926e8fed421bc43917ec4 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 28 Mar 2020 10:23:38 +0100 Subject: [PATCH 8/9] wrap to avoid quotes --- .../__snapshots__/wrongEnv.test.ts.snap | 24 +++++++++---------- e2e/__tests__/wrongEnv.test.ts | 23 +++++++++--------- 2 files changed, 23 insertions(+), 24 deletions(-) diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index eac4a24e237a..121c47d4524d 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -1,14 +1,14 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`Wrong globals for environment print useful error for document 1`] = ` -"FAIL __tests__/node.js +FAIL __tests__/node.js ✕ use document ○ skipped use window ● use document The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. - Consider using the \\"jsdom\\" test environment. + Consider using the "jsdom" test environment. ReferenceError: document is not defined @@ -20,17 +20,17 @@ exports[`Wrong globals for environment print useful error for document 1`] = ` 18 | console.log(div); 19 | - at Object.document (__tests__/node.js:16:15)" + at Object.document (__tests__/node.js:16:15) `; exports[`Wrong globals for environment print useful error for unref 1`] = ` -"FAIL __tests__/jsdom.js +FAIL __tests__/jsdom.js ✕ use unref ● use unref The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. - Consider using the \\"node\\" test environment. + Consider using the "node" test environment. TypeError: setTimeout(...).unref is not a function @@ -42,18 +42,18 @@ exports[`Wrong globals for environment print useful error for unref 1`] = ` 15 | expect(1).toBe(1); 16 | }); - at Object.unref (__tests__/jsdom.js:13:27)" + at Object.unref (__tests__/jsdom.js:13:27) `; exports[`Wrong globals for environment print useful error for window 1`] = ` -"FAIL __tests__/node.js +FAIL __tests__/node.js ✕ use window ○ skipped use document ● use window The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. - Consider using the \\"jsdom\\" test environment. + Consider using the "jsdom" test environment. ReferenceError: window is not defined @@ -65,15 +65,15 @@ exports[`Wrong globals for environment print useful error for window 1`] = ` 26 | console.log(location); 27 | - at Object.window (__tests__/node.js:24:20)" + at Object.window (__tests__/node.js:24:20) `; exports[`Wrong globals for environment print useful error when it explodes during evaluation 1`] = ` -"FAIL __tests__/beforeTest.js +FAIL __tests__/beforeTest.js ● Test suite failed to run The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. - Consider using the \\"jsdom\\" test environment. + Consider using the "jsdom" test environment. ReferenceError: document is not defined @@ -85,5 +85,5 @@ exports[`Wrong globals for environment print useful error when it explodes durin 15 | console.log(div); 16 | - at Object.document (__tests__/beforeTest.js:13:13)" + at Object.document (__tests__/beforeTest.js:13:13) `; diff --git a/e2e/__tests__/wrongEnv.test.ts b/e2e/__tests__/wrongEnv.test.ts index c83e790f8394..cc34bf454601 100644 --- a/e2e/__tests__/wrongEnv.test.ts +++ b/e2e/__tests__/wrongEnv.test.ts @@ -5,31 +5,30 @@ * LICENSE file in the root directory of this source tree. */ +import wrap from 'jest-snapshot-serializer-raw'; import runJest from '../runJest'; import {extractSummary} from '../Utils'; +function assertFailuresAndSnapshot(args: Array) { + const result = runJest('wrong-env', args); + expect(result.exitCode).toBe(1); + expect(wrap(extractSummary(result.stderr).rest)).toMatchSnapshot(); +} + describe('Wrong globals for environment', () => { it('print useful error for window', () => { - const result = runJest('wrong-env', ['node', '-t=window']); - expect(result.exitCode).toBe(1); - expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + assertFailuresAndSnapshot(['node', '-t=window']); }); it('print useful error for document', () => { - const result = runJest('wrong-env', ['node', '-t=document']); - expect(result.exitCode).toBe(1); - expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + assertFailuresAndSnapshot(['node', '-t=document']); }); it('print useful error for unref', () => { - const result = runJest('wrong-env', ['jsdom', '-t=unref']); - expect(result.exitCode).toBe(1); - expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + assertFailuresAndSnapshot(['jsdom', '-t=unref']); }); it('print useful error when it explodes during evaluation', () => { - const result = runJest('wrong-env', ['beforeTest']); - expect(result.exitCode).toBe(1); - expect(extractSummary(result.stderr).rest).toMatchSnapshot(); + assertFailuresAndSnapshot(['beforeTest']); }); }); From d214b34d0d6b3920a57dd0c73ea86745beff5929 Mon Sep 17 00:00:00 2001 From: Simen Bekkhus Date: Sat, 28 Mar 2020 10:28:15 +0100 Subject: [PATCH 9/9] check navigator --- .../__snapshots__/wrongEnv.test.ts.snap | 26 +++++++++++++++++++ e2e/__tests__/wrongEnv.test.ts | 4 +++ e2e/wrong-env/__tests__/node.js | 8 ++++++ packages/jest-message-util/src/index.ts | 3 ++- 4 files changed, 40 insertions(+), 1 deletion(-) diff --git a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap index 121c47d4524d..d551b668ba8c 100644 --- a/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap +++ b/e2e/__tests__/__snapshots__/wrongEnv.test.ts.snap @@ -4,6 +4,7 @@ exports[`Wrong globals for environment print useful error for document 1`] = ` FAIL __tests__/node.js ✕ use document ○ skipped use window + ○ skipped use navigator ● use document @@ -23,6 +24,30 @@ FAIL __tests__/node.js at Object.document (__tests__/node.js:16:15) `; +exports[`Wrong globals for environment print useful error for navigator 1`] = ` +FAIL __tests__/node.js + ✕ use navigator + ○ skipped use document + ○ skipped use window + + ● use navigator + + The error below may be caused by using the wrong test environment, see https://jestjs.io/docs/en/configuration#testenvironment-string. + Consider using the "jsdom" test environment. + + ReferenceError: navigator is not defined + + 30 | + 31 | test('use navigator', () => { + > 32 | const userAgent = navigator.userAgent; + | ^ + 33 | + 34 | console.log(userAgent); + 35 | + + at Object.navigator (__tests__/node.js:32:21) +`; + exports[`Wrong globals for environment print useful error for unref 1`] = ` FAIL __tests__/jsdom.js ✕ use unref @@ -49,6 +74,7 @@ exports[`Wrong globals for environment print useful error for window 1`] = ` FAIL __tests__/node.js ✕ use window ○ skipped use document + ○ skipped use navigator ● use window diff --git a/e2e/__tests__/wrongEnv.test.ts b/e2e/__tests__/wrongEnv.test.ts index cc34bf454601..2cb5f255ed92 100644 --- a/e2e/__tests__/wrongEnv.test.ts +++ b/e2e/__tests__/wrongEnv.test.ts @@ -24,6 +24,10 @@ describe('Wrong globals for environment', () => { assertFailuresAndSnapshot(['node', '-t=document']); }); + it('print useful error for navigator', () => { + assertFailuresAndSnapshot(['node', '-t=navigator']); + }); + it('print useful error for unref', () => { assertFailuresAndSnapshot(['jsdom', '-t=unref']); }); diff --git a/e2e/wrong-env/__tests__/node.js b/e2e/wrong-env/__tests__/node.js index bc8becde278a..ec43dca816f5 100644 --- a/e2e/wrong-env/__tests__/node.js +++ b/e2e/wrong-env/__tests__/node.js @@ -27,3 +27,11 @@ test('use window', () => { expect(1).toBe(1); }); + +test('use navigator', () => { + const userAgent = navigator.userAgent; + + console.log(userAgent); + + expect(1).toBe(1); +}); diff --git a/packages/jest-message-util/src/index.ts b/packages/jest-message-util/src/index.ts index 200b5d7dea5f..d46f75ffd0ac 100644 --- a/packages/jest-message-util/src/index.ts +++ b/packages/jest-message-util/src/index.ts @@ -95,7 +95,8 @@ const blankStringRegexp = /^\s*$/; function checkForCommonEnvironmentErrors(error: string) { if ( error.includes('ReferenceError: document is not defined') || - error.includes('ReferenceError: window is not defined') + error.includes('ReferenceError: window is not defined') || + error.includes('ReferenceError: navigator is not defined') ) { return warnAboutWrongTestEnvironment(error, 'jsdom'); } else if (error.includes('.unref is not a function')) {