From b0d7888c0bac365e59113ec407215d13aa74b820 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Fri, 15 Mar 2019 11:58:24 -0700 Subject: [PATCH 01/35] Remove babel-core dependency --- packages/react-error-overlay/package.json | 1 - packages/react-scripts/package.json | 1 - 2 files changed, 2 deletions(-) diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index 879f3992602..badca003f08 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -33,7 +33,6 @@ "@babel/code-frame": "7.0.0", "@babel/core": "7.3.4", "anser": "1.4.8", - "babel-core": "7.0.0-bridge.0", "babel-eslint": "10.0.1", "babel-jest": "24.5.0", "babel-loader": "8.0.5", diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 95c2b99bba1..12938d3ab37 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -28,7 +28,6 @@ "@svgr/webpack": "4.1.0", "@typescript-eslint/eslint-plugin": "1.4.1", "@typescript-eslint/parser": "1.4.1", - "babel-core": "7.0.0-bridge.0", "babel-eslint": "10.0.1", "babel-jest": "24.5.0", "babel-loader": "8.0.5", From 637d3cfdf3779e91533dabcf0984da6e803a041c Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Fri, 15 Mar 2019 15:04:29 -0700 Subject: [PATCH 02/35] Update babel-plugin-tester to remove babel-core dependency --- packages/babel-plugin-named-asset-import/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-plugin-named-asset-import/package.json b/packages/babel-plugin-named-asset-import/package.json index a6c9ccc7c57..defeada337c 100644 --- a/packages/babel-plugin-named-asset-import/package.json +++ b/packages/babel-plugin-named-asset-import/package.json @@ -15,7 +15,7 @@ "@babel/core": "^7.1.0" }, "devDependencies": { - "babel-plugin-tester": "^5.5.1", + "babel-plugin-tester": "^6.0.1", "jest": "^24.5.0" }, "scripts": { From 4db20cb0a68c3e0043d1c74cbaa31dd3d36a38f0 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Fri, 15 Mar 2019 18:37:28 -0700 Subject: [PATCH 03/35] Clean up jest config --- packages/react-scripts/package.json | 1 + .../react-scripts/scripts/utils/createJestConfig.js | 12 ++++-------- 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 12938d3ab37..641dc27baef 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -51,6 +51,7 @@ "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", "jest": "24.5.0", + "jest-environment-jsdom-fourteen": "0.1.0", "jest-resolve": "24.5.0", "jest-watch-typeahead": "^0.2.1", "mini-css-extract-plugin": "0.5.0", diff --git a/packages/react-scripts/scripts/utils/createJestConfig.js b/packages/react-scripts/scripts/utils/createJestConfig.js index 705f0f87ae3..c7f9707930b 100644 --- a/packages/react-scripts/scripts/utils/createJestConfig.js +++ b/packages/react-scripts/scripts/utils/createJestConfig.js @@ -24,22 +24,18 @@ module.exports = (resolve, rootDir, isEjecting) => { const config = { collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts'], - setupFiles: [ - isEjecting - ? 'react-app-polyfill/jsdom' - : require.resolve('react-app-polyfill/jsdom'), - ], + setupFiles: [require.resolve('react-app-polyfill/jsdom')], setupFilesAfterEnv: setupTestsFile ? [setupTestsFile] : [], testMatch: [ '/src/**/__tests__/**/*.{js,jsx,ts,tsx}', '/src/**/?(*.)(spec|test).{js,jsx,ts,tsx}', ], - testEnvironment: 'jsdom', + testEnvironment: require.resolve('jest-environment-jsdom-fourteen'), testURL: 'http://localhost', transform: { '^.+\\.(js|jsx|ts|tsx)$': isEjecting - ? '/node_modules/babel-jest' + ? require.resolve('babel-jest') : resolve('config/jest/babelTransform.js'), '^.+\\.css$': resolve('config/jest/cssTransform.js'), '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': resolve( @@ -52,7 +48,7 @@ module.exports = (resolve, rootDir, isEjecting) => { ], moduleNameMapper: { '^react-native$': 'react-native-web', - '^.+\\.module\\.(css|sass|scss)$': 'identity-obj-proxy', + '^.+\\.module\\.(css|sass|scss)$': require.resolve('identity-obj-proxy'), }, moduleFileExtensions: [...paths.moduleFileExtensions, 'node'].filter( ext => !ext.includes('mjs') From 98b539106829b7a74faeb85155b3f97c36417a5b Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Sat, 16 Mar 2019 09:24:38 -0700 Subject: [PATCH 04/35] Try updating kitchensink initDOM to use latest jsdom --- .../react-scripts/fixtures/kitchensink/integration/initDOM.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index e807888d397..9b8a01f6ee7 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -7,7 +7,7 @@ const fs = require('fs'); const http = require('http'); -const jsdom = require('jsdom/lib/old-api.js'); +const jsdom = require('jsdom'); const path = require('path'); let getMarkup; From 2875b1dbdb96a4e065264d9094462625c4393a25 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Sat, 16 Mar 2019 09:40:45 -0700 Subject: [PATCH 05/35] Update jsdom logic in tests --- .../react-scripts/fixtures/kitchensink/integration/initDOM.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 9b8a01f6ee7..2bde199adc3 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -57,14 +57,14 @@ export default feature => new Promise(async resolve => { const markup = await getMarkup(); const host = process.env.E2E_URL || 'http://www.example.org/spa:3000'; - const doc = jsdom.jsdom(markup, { + const doc = jsdom.JSDOM(markup, { created: (_, win) => win.addEventListener('ReactFeatureDidMount', () => resolve(doc), true), deferClose: true, pretendToBeVisual: true, resourceLoader, url: `${host}#${feature}`, - virtualConsole: jsdom.createVirtualConsole().sendTo(console), + virtualConsole: new jsdom.VirtualConsole().sendTo(console), }); doc.close(); From d36d8e32418501d034d6e925625fe38c743c0388 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Sat, 16 Mar 2019 09:48:32 -0700 Subject: [PATCH 06/35] Use new when constructing JSDOM document --- .../react-scripts/fixtures/kitchensink/integration/initDOM.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 2bde199adc3..3189351d4ea 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -57,7 +57,7 @@ export default feature => new Promise(async resolve => { const markup = await getMarkup(); const host = process.env.E2E_URL || 'http://www.example.org/spa:3000'; - const doc = jsdom.JSDOM(markup, { + const doc = new jsdom.JSDOM(markup, { created: (_, win) => win.addEventListener('ReactFeatureDidMount', () => resolve(doc), true), deferClose: true, From 3975201ba9e20d203f88888728910adfffd7cc58 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Sat, 16 Mar 2019 11:16:56 -0700 Subject: [PATCH 07/35] WIP WIP WIP WIP WIP WIP --- .../fixtures/kitchensink/README.md | 2 +- .../kitchensink/integration/env.test.js | 22 +++--- .../kitchensink/integration/initDOM.js | 71 ++++++++++++------- tasks/local-test.sh | 1 + 4 files changed, 58 insertions(+), 38 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/README.md b/packages/react-scripts/fixtures/kitchensink/README.md index 5a3edd13e83..9f7a3f9fb6c 100644 --- a/packages/react-scripts/fixtures/kitchensink/README.md +++ b/packages/react-scripts/fixtures/kitchensink/README.md @@ -8,7 +8,7 @@ Tests are automatically run by the CI tools. In order to run them locally, without having to manually install and configure everything, the `yarn e2e:docker` CLI command can be used. This is a simple script that runs a **Docker** container, where the node version, git branch to clone, test suite, and whether to run it with `yarn` or `npm` can be chosen. -Simply run `yarn e2e:docker -- --help` to get additional info. +Simply run `yarn e2e:docker --help` to get additional info. If you need guidance installing **Docker**, you should follow their [official docs](https://docs.docker.com/engine/installation/). diff --git a/packages/react-scripts/fixtures/kitchensink/integration/env.test.js b/packages/react-scripts/fixtures/kitchensink/integration/env.test.js index 79de16706dc..f86a09d52f6 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/env.test.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/env.test.js @@ -9,8 +9,15 @@ import initDOM from './initDOM'; describe('Integration', () => { describe('Environment variables', () => { + let doc; + + afterEach(() => { + doc && doc.defaultView.close(); + doc = undefined; + }); + it('file env variables', async () => { - const doc = await initDOM('file-env-variables'); + doc = await initDOM('file-env-variables'); expect( doc.getElementById('feature-file-env-original-1').textContent @@ -34,18 +41,16 @@ describe('Integration', () => { 'x-from-development-env' ); } - doc.defaultView.close(); }); it('NODE_PATH', async () => { - const doc = await initDOM('node-path'); + doc = await initDOM('node-path'); expect(doc.getElementById('feature-node-path').childElementCount).toBe(4); - doc.defaultView.close(); }); it('PUBLIC_URL', async () => { - const doc = await initDOM('public-url'); + doc = await initDOM('public-url'); const prefix = process.env.NODE_ENV === 'development' @@ -57,20 +62,18 @@ describe('Integration', () => { expect( doc.querySelector('head link[rel="shortcut icon"]').getAttribute('href') ).toBe(`${prefix}/favicon.ico`); - doc.defaultView.close(); }); it('shell env variables', async () => { - const doc = await initDOM('shell-env-variables'); + doc = await initDOM('shell-env-variables'); expect( doc.getElementById('feature-shell-env-variables').textContent ).toBe('fromtheshell.'); - doc.defaultView.close(); }); it('expand .env variables', async () => { - const doc = await initDOM('expand-env-variables'); + doc = await initDOM('expand-env-variables'); expect(doc.getElementById('feature-expand-env-1').textContent).toBe( 'basic' @@ -84,7 +87,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-expand-env-existing').textContent ).toBe('fromtheshell'); - doc.defaultView.close(); }); }); }); diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 3189351d4ea..9cda4697968 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -7,7 +7,7 @@ const fs = require('fs'); const http = require('http'); -const jsdom = require('jsdom'); +const { JSDOM, ResourceLoader, VirtualConsole } = require('jsdom'); const path = require('path'); let getMarkup; @@ -23,17 +23,16 @@ if (process.env.E2E_FILE) { const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); - resourceLoader = (resource, callback) => - callback( - null, - fs.readFileSync( - path.join( - path.dirname(file), - resource.url.pathname.replace(pathPrefix, '') - ), - 'utf8' - ) - ); + resouceLoader = new class FileResourceLoader extends ResourceLoader { + fetch(url, options) { + return Promise.resolve( + fs.readFileSync( + path.join(path.dirname(file), url.pathname.replace(pathPrefix, '')), + 'utf8' + ) + ); + } + }(); } else if (process.env.E2E_URL) { getMarkup = () => new Promise(resolve => { @@ -43,8 +42,6 @@ if (process.env.E2E_FILE) { res.on('end', () => resolve(rawData)); }); }); - - resourceLoader = (resource, callback) => resource.defaultFetch(callback); } else { it.only('can run jsdom (at least one of "E2E_FILE" or "E2E_URL" environment variables must be provided)', () => { expect( @@ -54,18 +51,38 @@ if (process.env.E2E_FILE) { } export default feature => - new Promise(async resolve => { - const markup = await getMarkup(); - const host = process.env.E2E_URL || 'http://www.example.org/spa:3000'; - const doc = new jsdom.JSDOM(markup, { - created: (_, win) => - win.addEventListener('ReactFeatureDidMount', () => resolve(doc), true), - deferClose: true, - pretendToBeVisual: true, - resourceLoader, - url: `${host}#${feature}`, - virtualConsole: new jsdom.VirtualConsole().sendTo(console), - }); + new Promise(async (resolve, reject) => { + try { + // const markup = await getMarkup(); + const host = process.env.E2E_URL || 'http://www.example.org/spa:3000'; + + const url = `${host}#${feature}`; + + const { window } = await JSDOM.fromURL(url, { + pretendToBeVisual: true, + resources: 'usable', + runScripts: 'dangerously', + }); + + const { document } = window; + + // console.log(document); + // console.log(window); + + // const { document } = new JSDOM(markup, { + // pretendToBeVisual: true, + // resourceLoader, + // resources: 'usable', + // runScripts: 'dangerously', + // url, + // }).window; - doc.close(); + document.addEventListener( + 'ReactFeatureDidMount', + () => resolve(document), + true + ); + } catch (e) { + reject(e); + } }); diff --git a/tasks/local-test.sh b/tasks/local-test.sh index aad6a477076..d1c01946c2f 100755 --- a/tasks/local-test.sh +++ b/tasks/local-test.sh @@ -114,6 +114,7 @@ docker run \ --env NPM_CONFIG_PREFIX=/home/node/.npm \ --env NPM_CONFIG_QUIET=true \ --tty \ + --rm \ --user node \ --volume ${PWD}/..:/var/create-react-app \ --workdir /home/node \ From 0bb3e3ebd4dca61b6983f93221cd7db3afa3c632 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Sat, 16 Mar 2019 22:29:41 -0700 Subject: [PATCH 08/35] WIP --- .../kitchensink/integration/initDOM.js | 92 +++++++++---------- 1 file changed, 41 insertions(+), 51 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 9cda4697968..37b0316562f 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -6,43 +6,12 @@ */ const fs = require('fs'); -const http = require('http'); -const { JSDOM, ResourceLoader, VirtualConsole } = require('jsdom'); +const { JSDOM, ResourceLoader } = require('jsdom'); const path = require('path'); -let getMarkup; -export let resourceLoader; +// export let resourceLoader; -if (process.env.E2E_FILE) { - const file = path.isAbsolute(process.env.E2E_FILE) - ? process.env.E2E_FILE - : path.join(process.cwd(), process.env.E2E_FILE); - - const markup = fs.readFileSync(file, 'utf8'); - getMarkup = () => markup; - - const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); - - resouceLoader = new class FileResourceLoader extends ResourceLoader { - fetch(url, options) { - return Promise.resolve( - fs.readFileSync( - path.join(path.dirname(file), url.pathname.replace(pathPrefix, '')), - 'utf8' - ) - ); - } - }(); -} else if (process.env.E2E_URL) { - getMarkup = () => - new Promise(resolve => { - http.get(process.env.E2E_URL, res => { - let rawData = ''; - res.on('data', chunk => (rawData += chunk)); - res.on('end', () => resolve(rawData)); - }); - }); -} else { +if (!process.env.E2E_FILE && !process.env.E2E_URL) { it.only('can run jsdom (at least one of "E2E_FILE" or "E2E_URL" environment variables must be provided)', () => { expect( new Error("This isn't the error you are looking for.") @@ -53,29 +22,50 @@ if (process.env.E2E_FILE) { export default feature => new Promise(async (resolve, reject) => { try { - // const markup = await getMarkup(); const host = process.env.E2E_URL || 'http://www.example.org/spa:3000'; - const url = `${host}#${feature}`; - const { window } = await JSDOM.fromURL(url, { - pretendToBeVisual: true, - resources: 'usable', - runScripts: 'dangerously', - }); + let window; - const { document } = window; + if (process.env.E2E_FILE) { + const file = path.isAbsolute(process.env.E2E_FILE) + ? process.env.E2E_FILE + : path.join(process.cwd(), process.env.E2E_FILE); + + const pathPrefix = process.env.PUBLIC_URL.replace( + /^https?:\/\/[^/]+\/?/, + '' + ); - // console.log(document); - // console.log(window); + const resourceLoader = new class FileResourceLoader extends ResourceLoader { + fetch(url, options) { + return Promise.resolve( + fs.readFileSync( + path.join( + path.dirname(file), + url.pathname.replace(pathPrefix, '') + ), + 'utf8' + ) + ); + } + }(); - // const { document } = new JSDOM(markup, { - // pretendToBeVisual: true, - // resourceLoader, - // resources: 'usable', - // runScripts: 'dangerously', - // url, - // }).window; + window = (await JSDOM.fromFile(file, { + pretendToBeVisual: true, + resources: resourceLoader, + runScripts: 'dangerously', + url, + })).window; + } else { + window = (await JSDOM.fromURL(url, { + pretendToBeVisual: true, + resources: 'usable', + runScripts: 'dangerously', + })).window; + } + + const { document } = window; document.addEventListener( 'ReactFeatureDidMount', From c6896b1af0b2cf9f6468ae52e022d0d3fc3e12a6 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Mon, 1 Apr 2019 18:53:43 -0700 Subject: [PATCH 09/35] WIP --- .../kitchensink/integration/initDOM.js | 47 +++++++++---------- .../kitchensink/integration/webpack.test.js | 12 ++--- 2 files changed, 28 insertions(+), 31 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 37b0316562f..bc601622470 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -9,7 +9,27 @@ const fs = require('fs'); const { JSDOM, ResourceLoader } = require('jsdom'); const path = require('path'); -// export let resourceLoader; +export let fetchFile; + +if (process.env.E2E_FILE) { + const file = path.isAbsolute(process.env.E2E_FILE) + ? process.env.E2E_FILE + : path.join(process.cwd(), process.env.E2E_FILE); + + const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); + + const fetchFile = url => + fs.readFileSync( + path.join(path.dirname(file), url.pathname.replace(pathPrefix, '')), + 'utf8' + ); + + fileResourceLoader = new class FileResourceLoader extends ResourceLoader { + fetch(url, options) { + return Promise.resolve(fetchFile(url)); + } + }(); +} if (!process.env.E2E_FILE && !process.env.E2E_URL) { it.only('can run jsdom (at least one of "E2E_FILE" or "E2E_URL" environment variables must be provided)', () => { @@ -28,32 +48,9 @@ export default feature => let window; if (process.env.E2E_FILE) { - const file = path.isAbsolute(process.env.E2E_FILE) - ? process.env.E2E_FILE - : path.join(process.cwd(), process.env.E2E_FILE); - - const pathPrefix = process.env.PUBLIC_URL.replace( - /^https?:\/\/[^/]+\/?/, - '' - ); - - const resourceLoader = new class FileResourceLoader extends ResourceLoader { - fetch(url, options) { - return Promise.resolve( - fs.readFileSync( - path.join( - path.dirname(file), - url.pathname.replace(pathPrefix, '') - ), - 'utf8' - ) - ); - } - }(); - window = (await JSDOM.fromFile(file, { pretendToBeVisual: true, - resources: resourceLoader, + resources: fileResourceLoader, runScripts: 'dangerously', url, })).window; diff --git a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js index 32c9b47a48d..b220d30675f 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js @@ -5,7 +5,7 @@ * LICENSE file in the root directory of this source tree. */ -import initDOM, { resourceLoader } from './initDOM'; +import initDOM, { fetchFile } from './initDOM'; import url from 'url'; const matchCSS = (doc, regexes) => { @@ -17,11 +17,11 @@ const matchCSS = (doc, regexes) => { href = elem.href; } } - resourceLoader({ url: url.parse(href) }, (_, textContent) => { - for (const regex of regexes) { - expect(textContent).toMatch(regex); - } - }); + + const textContent = fetchFile(url.parse(href)); + for (const regex of regexes) { + expect(textContent).toMatch(regex); + } } else { for (let i = 0; i < regexes.length; ++i) { expect( From 13b8af9b534b5121e6363b096374668d01384791 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Tue, 2 Apr 2019 20:02:12 -0700 Subject: [PATCH 10/35] Synchronize Jest versions to fix build error --- package.json | 2 +- packages/babel-plugin-named-asset-import/package.json | 2 +- packages/confusing-browser-globals/package.json | 2 +- packages/react-dev-utils/package.json | 2 +- packages/react-error-overlay/package.json | 2 +- .../fixtures/kitchensink/.template.dependencies.json | 2 +- packages/react-scripts/package.json | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 6e6884f2ca2..efb2bef96f4 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "get-port": "^4.2.0", "globby": "^9.1.0", "husky": "^1.3.1", - "jest": "^24.5.0", + "jest": "24.6.0", "lerna": "2.9.1", "lerna-changelog": "~0.8.2", "lint-staged": "^8.0.4", diff --git a/packages/babel-plugin-named-asset-import/package.json b/packages/babel-plugin-named-asset-import/package.json index defeada337c..117e49c86fc 100644 --- a/packages/babel-plugin-named-asset-import/package.json +++ b/packages/babel-plugin-named-asset-import/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "babel-plugin-tester": "^6.0.1", - "jest": "^24.5.0" + "jest": "24.6.0" }, "scripts": { "test": "jest" diff --git a/packages/confusing-browser-globals/package.json b/packages/confusing-browser-globals/package.json index 54edd9c8893..d6577b3f7bc 100644 --- a/packages/confusing-browser-globals/package.json +++ b/packages/confusing-browser-globals/package.json @@ -16,6 +16,6 @@ "index.js" ], "devDependencies": { - "jest": "24.5.0" + "jest": "24.6.0" } } diff --git a/packages/react-dev-utils/package.json b/packages/react-dev-utils/package.json index 1c0f172069f..817ecbc398c 100644 --- a/packages/react-dev-utils/package.json +++ b/packages/react-dev-utils/package.json @@ -74,7 +74,7 @@ }, "devDependencies": { "cross-env": "^5.2.0", - "jest": "^24.5.0" + "jest": "24.6.0" }, "scripts": { "test": "cross-env FORCE_COLOR=true jest" diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index badca003f08..8cda479fb93 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -48,7 +48,7 @@ "eslint-plugin-react": "7.12.4", "flow-bin": "^0.63.1", "html-entities": "1.2.1", - "jest": "24.5.0", + "jest": "24.6.0", "jest-fetch-mock": "2.1.1", "object-assign": "4.1.1", "promise": "8.0.2", diff --git a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json index b892bb90a42..90a11c5087e 100644 --- a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json +++ b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json @@ -1,7 +1,7 @@ { "dependencies": { "bootstrap": "4.1.1", - "jest": "24.5.0", + "jest": "24.6.0", "node-sass": "4.8.3", "normalize.css": "7.0.0", "prop-types": "15.5.6", diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index a0ee9cf7b4b..438a2d9c61e 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -49,7 +49,7 @@ "fs-extra": "7.0.1", "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", - "jest": "24.5.0", + "jest": "24.6.0", "jest-environment-jsdom-fourteen": "0.1.0", "jest-resolve": "24.5.0", "jest-watch-typeahead": "^0.2.1", From 2ae77804222feac81b1be03bb759945f1f911643 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Tue, 2 Apr 2019 20:33:01 -0700 Subject: [PATCH 11/35] Remove unnecessary testURL option --- packages/react-scripts/scripts/utils/createJestConfig.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/react-scripts/scripts/utils/createJestConfig.js b/packages/react-scripts/scripts/utils/createJestConfig.js index c7f9707930b..384e304046e 100644 --- a/packages/react-scripts/scripts/utils/createJestConfig.js +++ b/packages/react-scripts/scripts/utils/createJestConfig.js @@ -32,7 +32,6 @@ module.exports = (resolve, rootDir, isEjecting) => { '/src/**/?(*.)(spec|test).{js,jsx,ts,tsx}', ], testEnvironment: require.resolve('jest-environment-jsdom-fourteen'), - testURL: 'http://localhost', transform: { '^.+\\.(js|jsx|ts|tsx)$': isEjecting ? require.resolve('babel-jest') From d7e2f5d9a319d0af4e13f5829c491523c02e54d3 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Tue, 2 Apr 2019 20:44:06 -0700 Subject: [PATCH 12/35] Fix package version conflicts --- packages/react-error-overlay/package.json | 2 +- packages/react-scripts/package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index 8cda479fb93..fd5922a7c11 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -34,7 +34,7 @@ "@babel/core": "7.3.4", "anser": "1.4.8", "babel-eslint": "10.0.1", - "babel-jest": "24.5.0", + "babel-jest": "24.6.0", "babel-loader": "8.0.5", "babel-preset-react-app": "^7.0.2", "chalk": "^2.4.2", diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 438a2d9c61e..0453d57da4f 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/eslint-plugin": "1.4.1", "@typescript-eslint/parser": "1.4.1", "babel-eslint": "10.0.1", - "babel-jest": "24.5.0", + "babel-jest": "24.6.0", "babel-loader": "8.0.5", "babel-plugin-named-asset-import": "^0.3.1", "babel-preset-react-app": "^7.0.2", @@ -51,7 +51,7 @@ "identity-obj-proxy": "3.0.0", "jest": "24.6.0", "jest-environment-jsdom-fourteen": "0.1.0", - "jest-resolve": "24.5.0", + "jest-resolve": "24.6.0", "jest-watch-typeahead": "^0.2.1", "mini-css-extract-plugin": "0.5.0", "optimize-css-assets-webpack-plugin": "5.0.1", From d945daa75282179858218806f575df23b770e58e Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Tue, 2 Apr 2019 21:40:46 -0700 Subject: [PATCH 13/35] Handle when kitchensink test fails to load --- .../kitchensink/integration/initDOM.js | 5 ++++ .../fixtures/kitchensink/src/App.js | 26 +++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index bc601622470..cb31a3f75ac 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -69,6 +69,11 @@ export default feature => () => resolve(document), true ); + document.addEventListener( + 'ReactFeatureError', + () => reject(`Error loading feature: ${feature}`), + true + ); } catch (e) { reject(e); } diff --git a/packages/react-scripts/fixtures/kitchensink/src/App.js b/packages/react-scripts/fixtures/kitchensink/src/App.js index 380a49fc639..2e33b3b1322 100644 --- a/packages/react-scripts/fixtures/kitchensink/src/App.js +++ b/packages/react-scripts/fixtures/kitchensink/src/App.js @@ -14,7 +14,12 @@ class BuiltEmitter extends Component { }; componentDidMount() { - const { feature } = this.props; + const { error, feature } = this.props; + + if (error) { + this.handleError(error); + return; + } // Class components must call this.props.onReady when they're ready for the test. // We will assume functional components are ready immediately after mounting. @@ -23,6 +28,10 @@ class BuiltEmitter extends Component { } } + handleError(error) { + document.dispatchEvent(new Event('ReactFeatureError')); + } + handleReady() { document.dispatchEvent(new Event('ReactFeatureDidMount')); } @@ -34,9 +43,10 @@ class BuiltEmitter extends Component { } = this; return (
- {createElement(feature, { - onReady: handleReady, - })} + {feature && + createElement(feature, { + onReady: handleReady, + })}
); } @@ -223,7 +233,7 @@ class App extends Component { ); break; default: - throw new Error(`Missing feature "${feature}"`); + this.setState({ error: `Missing feature "${feature}"` }); } } @@ -232,9 +242,9 @@ class App extends Component { } render() { - const { feature } = this.state; - if (feature !== null) { - return ; + const { error, feature } = this.state; + if (error || feature) { + return ; } return null; } From 8d4149d496a61ca7c8e520f69e51f203ee72bc0a Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Tue, 2 Apr 2019 21:49:48 -0700 Subject: [PATCH 14/35] Port other test suites --- .../kitchensink/integration/initDOM.js | 4 +- .../kitchensink/integration/syntax.test.js | 37 +++++++++++-------- .../kitchensink/integration/webpack.test.js | 35 +++++++++++------- 3 files changed, 45 insertions(+), 31 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index cb31a3f75ac..7de662c49f5 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -67,12 +67,12 @@ export default feature => document.addEventListener( 'ReactFeatureDidMount', () => resolve(document), - true + { capture: true, once: true } ); document.addEventListener( 'ReactFeatureError', () => reject(`Error loading feature: ${feature}`), - true + { capture: true, once: true } ); } catch (e) { reject(e); diff --git a/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js b/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js index 54920726fa5..91d69038a48 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js @@ -9,8 +9,15 @@ import initDOM from './initDOM'; describe('Integration', () => { describe('Language syntax', () => { + let doc; + + afterEach(() => { + doc && doc.defaultView.close(); + doc = undefined; + }); + it('array destructuring', async () => { - const doc = await initDOM('array-destructuring'); + doc = await initDOM('array-destructuring'); expect( doc.getElementById('feature-array-destructuring').childElementCount @@ -19,7 +26,7 @@ describe('Integration', () => { }); it('array spread', async () => { - const doc = await initDOM('array-spread'); + doc = await initDOM('array-spread'); expect(doc.getElementById('feature-array-spread').childElementCount).toBe( 4 @@ -28,7 +35,7 @@ describe('Integration', () => { }); it('async/await', async () => { - const doc = await initDOM('async-await'); + doc = await initDOM('async-await'); expect(doc.getElementById('feature-async-await').childElementCount).toBe( 4 @@ -37,7 +44,7 @@ describe('Integration', () => { }); it('class properties', async () => { - const doc = await initDOM('class-properties'); + doc = await initDOM('class-properties'); expect( doc.getElementById('feature-class-properties').childElementCount @@ -46,7 +53,7 @@ describe('Integration', () => { }); it('computed properties', async () => { - const doc = await initDOM('computed-properties'); + doc = await initDOM('computed-properties'); expect( doc.getElementById('feature-computed-properties').childElementCount @@ -55,7 +62,7 @@ describe('Integration', () => { }); it('custom interpolation', async () => { - const doc = await initDOM('custom-interpolation'); + doc = await initDOM('custom-interpolation'); expect( doc.getElementById('feature-custom-interpolation').childElementCount @@ -64,7 +71,7 @@ describe('Integration', () => { }); it('default parameters', async () => { - const doc = await initDOM('default-parameters'); + doc = await initDOM('default-parameters'); expect( doc.getElementById('feature-default-parameters').childElementCount @@ -73,7 +80,7 @@ describe('Integration', () => { }); it('destructuring and await', async () => { - const doc = await initDOM('destructuring-and-await'); + doc = await initDOM('destructuring-and-await'); expect( doc.getElementById('feature-destructuring-and-await').childElementCount @@ -82,7 +89,7 @@ describe('Integration', () => { }); it('generators', async () => { - const doc = await initDOM('generators'); + doc = await initDOM('generators'); expect(doc.getElementById('feature-generators').childElementCount).toBe( 4 @@ -91,7 +98,7 @@ describe('Integration', () => { }); it('object destructuring', async () => { - const doc = await initDOM('object-destructuring'); + doc = await initDOM('object-destructuring'); expect( doc.getElementById('feature-object-destructuring').childElementCount @@ -100,7 +107,7 @@ describe('Integration', () => { }); it('object spread', async () => { - const doc = await initDOM('object-spread'); + doc = await initDOM('object-spread'); expect( doc.getElementById('feature-object-spread').childElementCount @@ -109,14 +116,14 @@ describe('Integration', () => { }); it('promises', async () => { - const doc = await initDOM('promises'); + doc = await initDOM('promises'); expect(doc.getElementById('feature-promises').childElementCount).toBe(4); doc.defaultView.close(); }); it('rest + default', async () => { - const doc = await initDOM('rest-and-default'); + doc = await initDOM('rest-and-default'); expect( doc.getElementById('feature-rest-and-default').childElementCount @@ -125,7 +132,7 @@ describe('Integration', () => { }); it('rest parameters', async () => { - const doc = await initDOM('rest-parameters'); + doc = await initDOM('rest-parameters'); expect( doc.getElementById('feature-rest-parameters').childElementCount @@ -134,7 +141,7 @@ describe('Integration', () => { }); it('template interpolation', async () => { - const doc = await initDOM('template-interpolation'); + doc = await initDOM('template-interpolation'); expect( doc.getElementById('feature-template-interpolation').childElementCount diff --git a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js index b220d30675f..290fc1a2301 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js @@ -33,8 +33,15 @@ const matchCSS = (doc, regexes) => { describe('Integration', () => { describe('Webpack plugins', () => { + let doc; + + afterEach(() => { + doc && doc.defaultView.close(); + doc = undefined; + }); + it('css inclusion', async () => { - const doc = await initDOM('css-inclusion'); + doc = await initDOM('css-inclusion'); matchCSS(doc, [ /html\{/, /#feature-css-inclusion\{background:.+;color:.+}/, @@ -43,7 +50,7 @@ describe('Integration', () => { }); it('css modules inclusion', async () => { - const doc = await initDOM('css-modules-inclusion'); + doc = await initDOM('css-modules-inclusion'); matchCSS(doc, [ /.+style_cssModulesInclusion__.+\{background:.+;color:.+}/, /.+assets_cssModulesIndexInclusion__.+\{background:.+;color:.+}/, @@ -52,13 +59,13 @@ describe('Integration', () => { }); it('scss inclusion', async () => { - const doc = await initDOM('scss-inclusion'); + doc = await initDOM('scss-inclusion'); matchCSS(doc, [/#feature-scss-inclusion\{background:.+;color:.+}/]); doc.defaultView.close(); }); it('scss modules inclusion', async () => { - const doc = await initDOM('scss-modules-inclusion'); + doc = await initDOM('scss-modules-inclusion'); matchCSS(doc, [ /.+scss-styles_scssModulesInclusion.+\{background:.+;color:.+}/, /.+assets_scssModulesIndexInclusion.+\{background:.+;color:.+}/, @@ -67,13 +74,13 @@ describe('Integration', () => { }); it('sass inclusion', async () => { - const doc = await initDOM('sass-inclusion'); + doc = await initDOM('sass-inclusion'); matchCSS(doc, [/#feature-sass-inclusion\{background:.+;color:.+}/]); doc.defaultView.close(); }); it('sass modules inclusion', async () => { - const doc = await initDOM('sass-modules-inclusion'); + doc = await initDOM('sass-modules-inclusion'); matchCSS(doc, [ /.+sass-styles_sassModulesInclusion.+\{background:.+;color:.+}/, /.+assets_sassModulesIndexInclusion.+\{background:.+;color:.+}/, @@ -82,7 +89,7 @@ describe('Integration', () => { }); it('image inclusion', async () => { - const doc = await initDOM('image-inclusion'); + doc = await initDOM('image-inclusion'); expect(doc.getElementById('feature-image-inclusion').src).toMatch( /^data:image\/jpeg;base64.+==$/ @@ -91,7 +98,7 @@ describe('Integration', () => { }); it('no ext inclusion', async () => { - const doc = await initDOM('no-ext-inclusion'); + doc = await initDOM('no-ext-inclusion'); expect(doc.getElementById('feature-no-ext-inclusion').href).toMatch( /\/static\/media\/aFileWithoutExt\.[a-f0-9]{8}\.bin$/ @@ -100,7 +107,7 @@ describe('Integration', () => { }); it('json inclusion', async () => { - const doc = await initDOM('json-inclusion'); + doc = await initDOM('json-inclusion'); expect(doc.getElementById('feature-json-inclusion').textContent).toBe( 'This is an abstract.' @@ -109,7 +116,7 @@ describe('Integration', () => { }); it('linked modules', async () => { - const doc = await initDOM('linked-modules'); + doc = await initDOM('linked-modules'); expect(doc.getElementById('feature-linked-modules').textContent).toBe( '2.0.0' @@ -118,7 +125,7 @@ describe('Integration', () => { }); it('svg inclusion', async () => { - const doc = await initDOM('svg-inclusion'); + doc = await initDOM('svg-inclusion'); expect(doc.getElementById('feature-svg-inclusion').src).toMatch( /\/static\/media\/logo\..+\.svg$/ ); @@ -126,20 +133,20 @@ describe('Integration', () => { }); it('svg component', async () => { - const doc = await initDOM('svg-component'); + doc = await initDOM('svg-component'); expect(doc.getElementById('feature-svg-component').textContent).toBe(''); doc.defaultView.close(); }); it('svg in css', async () => { - const doc = await initDOM('svg-in-css'); + doc = await initDOM('svg-in-css'); matchCSS(doc, [/\/static\/media\/logo\..+\.svg/]); doc.defaultView.close(); }); it('unknown ext inclusion', async () => { - const doc = await initDOM('unknown-ext-inclusion'); + doc = await initDOM('unknown-ext-inclusion'); expect(doc.getElementById('feature-unknown-ext-inclusion').href).toMatch( /\/static\/media\/aFileWithExt\.[a-f0-9]{8}\.unknown$/ From 326f7d29f219d6c70249761561a2f77fdf4dd106 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Tue, 2 Apr 2019 21:56:18 -0700 Subject: [PATCH 15/35] Bump to Jest 24.7.0 --- package.json | 2 +- packages/babel-plugin-named-asset-import/package.json | 2 +- packages/confusing-browser-globals/package.json | 2 +- packages/react-dev-utils/package.json | 2 +- packages/react-error-overlay/package.json | 4 ++-- packages/react-scripts/package.json | 8 ++++---- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index efb2bef96f4..126e52bb955 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "get-port": "^4.2.0", "globby": "^9.1.0", "husky": "^1.3.1", - "jest": "24.6.0", + "jest": "24.7.0", "lerna": "2.9.1", "lerna-changelog": "~0.8.2", "lint-staged": "^8.0.4", diff --git a/packages/babel-plugin-named-asset-import/package.json b/packages/babel-plugin-named-asset-import/package.json index 117e49c86fc..c0f4c4d3cf6 100644 --- a/packages/babel-plugin-named-asset-import/package.json +++ b/packages/babel-plugin-named-asset-import/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "babel-plugin-tester": "^6.0.1", - "jest": "24.6.0" + "jest": "24.7.0" }, "scripts": { "test": "jest" diff --git a/packages/confusing-browser-globals/package.json b/packages/confusing-browser-globals/package.json index d6577b3f7bc..d86219121ea 100644 --- a/packages/confusing-browser-globals/package.json +++ b/packages/confusing-browser-globals/package.json @@ -16,6 +16,6 @@ "index.js" ], "devDependencies": { - "jest": "24.6.0" + "jest": "24.7.0" } } diff --git a/packages/react-dev-utils/package.json b/packages/react-dev-utils/package.json index 817ecbc398c..f608eef2151 100644 --- a/packages/react-dev-utils/package.json +++ b/packages/react-dev-utils/package.json @@ -74,7 +74,7 @@ }, "devDependencies": { "cross-env": "^5.2.0", - "jest": "24.6.0" + "jest": "24.7.0" }, "scripts": { "test": "cross-env FORCE_COLOR=true jest" diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index fd5922a7c11..8d34bff34f4 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -34,7 +34,7 @@ "@babel/core": "7.3.4", "anser": "1.4.8", "babel-eslint": "10.0.1", - "babel-jest": "24.6.0", + "babel-jest": "24.7.0", "babel-loader": "8.0.5", "babel-preset-react-app": "^7.0.2", "chalk": "^2.4.2", @@ -48,7 +48,7 @@ "eslint-plugin-react": "7.12.4", "flow-bin": "^0.63.1", "html-entities": "1.2.1", - "jest": "24.6.0", + "jest": "24.7.0", "jest-fetch-mock": "2.1.1", "object-assign": "4.1.1", "promise": "8.0.2", diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 0453d57da4f..3da27d13688 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/eslint-plugin": "1.4.1", "@typescript-eslint/parser": "1.4.1", "babel-eslint": "10.0.1", - "babel-jest": "24.6.0", + "babel-jest": "24.7.0", "babel-loader": "8.0.5", "babel-plugin-named-asset-import": "^0.3.1", "babel-preset-react-app": "^7.0.2", @@ -49,10 +49,10 @@ "fs-extra": "7.0.1", "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", - "jest": "24.6.0", + "jest": "24.7.0", "jest-environment-jsdom-fourteen": "0.1.0", - "jest-resolve": "24.6.0", - "jest-watch-typeahead": "^0.2.1", + "jest-resolve": "24.7.0", + "jest-watch-typeahead": "0.3.0", "mini-css-extract-plugin": "0.5.0", "optimize-css-assets-webpack-plugin": "5.0.1", "pnp-webpack-plugin": "1.2.1", From 1449860d911d0d25ac5e0df29abaeb5fa03e38bc Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Tue, 2 Apr 2019 22:12:11 -0700 Subject: [PATCH 16/35] Missed a jest reference --- .../fixtures/kitchensink/.template.dependencies.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json index 90a11c5087e..5f307df190c 100644 --- a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json +++ b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json @@ -1,7 +1,7 @@ { "dependencies": { "bootstrap": "4.1.1", - "jest": "24.6.0", + "jest": "24.7.0", "node-sass": "4.8.3", "normalize.css": "7.0.0", "prop-types": "15.5.6", From a647d31c63a684dff3b43c5cad48d919100130fe Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 18:07:46 -0700 Subject: [PATCH 17/35] Fix BuildEmitter propTypes --- packages/react-scripts/fixtures/kitchensink/src/App.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/react-scripts/fixtures/kitchensink/src/App.js b/packages/react-scripts/fixtures/kitchensink/src/App.js index 2e33b3b1322..fb838e54d7a 100644 --- a/packages/react-scripts/fixtures/kitchensink/src/App.js +++ b/packages/react-scripts/fixtures/kitchensink/src/App.js @@ -10,7 +10,8 @@ import PropTypes from 'prop-types'; class BuiltEmitter extends Component { static propTypes = { - feature: PropTypes.func.isRequired, + error: PropTypes.string, + feature: PropTypes.func, }; componentDidMount() { From ef782a8ff33f37141bcad4c3940c3aa8f0b4ed07 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 19:13:34 -0700 Subject: [PATCH 18/35] Can't run this locally.. go travis --- .../fixtures/kitchensink/integration/initDOM.js | 7 ++++++- tasks/e2e-kitchensink.sh | 2 +- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 7de662c49f5..8457caa8084 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -71,7 +71,12 @@ export default feature => ); document.addEventListener( 'ReactFeatureError', - () => reject(`Error loading feature: ${feature}`), + () => { + // Cleanup jsdom instance since we don't need it anymore + window.close(); + + reject(`Error loading feature: ${feature}`); + }, { capture: true, once: true } ); } catch (e) { diff --git a/tasks/e2e-kitchensink.sh b/tasks/e2e-kitchensink.sh index d9810d67941..a6e1d865824 100755 --- a/tasks/e2e-kitchensink.sh +++ b/tasks/e2e-kitchensink.sh @@ -153,7 +153,7 @@ E2E_URL="http://localhost:3001" \ CI=true NODE_PATH=src \ NODE_ENV=development \ BABEL_ENV=test \ - node_modules/.bin/jest --no-cache --runInBand --config='jest.integration.config.js' + node_modules/.bin/jest --no-cache --runInBand --detectOpenHandles --config='jest.integration.config.js' # Test "production" environment E2E_FILE=./build/index.html \ CI=true \ From 6b372dd419baa8e552a4e04adcee44148f90d0b4 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 19:23:36 -0700 Subject: [PATCH 19/35] Bump Jest to 24.7.1 --- package.json | 2 +- packages/babel-plugin-named-asset-import/package.json | 2 +- packages/confusing-browser-globals/package.json | 2 +- packages/react-dev-utils/package.json | 2 +- packages/react-error-overlay/package.json | 4 ++-- .../fixtures/kitchensink/.template.dependencies.json | 2 +- packages/react-scripts/package.json | 6 +++--- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 126e52bb955..198855b6ca1 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "get-port": "^4.2.0", "globby": "^9.1.0", "husky": "^1.3.1", - "jest": "24.7.0", + "jest": "24.7.1", "lerna": "2.9.1", "lerna-changelog": "~0.8.2", "lint-staged": "^8.0.4", diff --git a/packages/babel-plugin-named-asset-import/package.json b/packages/babel-plugin-named-asset-import/package.json index c0f4c4d3cf6..e78d36b5ff4 100644 --- a/packages/babel-plugin-named-asset-import/package.json +++ b/packages/babel-plugin-named-asset-import/package.json @@ -16,7 +16,7 @@ }, "devDependencies": { "babel-plugin-tester": "^6.0.1", - "jest": "24.7.0" + "jest": "24.7.1" }, "scripts": { "test": "jest" diff --git a/packages/confusing-browser-globals/package.json b/packages/confusing-browser-globals/package.json index d86219121ea..8a01fe564e2 100644 --- a/packages/confusing-browser-globals/package.json +++ b/packages/confusing-browser-globals/package.json @@ -16,6 +16,6 @@ "index.js" ], "devDependencies": { - "jest": "24.7.0" + "jest": "24.7.1" } } diff --git a/packages/react-dev-utils/package.json b/packages/react-dev-utils/package.json index f608eef2151..a6412d7feea 100644 --- a/packages/react-dev-utils/package.json +++ b/packages/react-dev-utils/package.json @@ -74,7 +74,7 @@ }, "devDependencies": { "cross-env": "^5.2.0", - "jest": "24.7.0" + "jest": "24.7.1" }, "scripts": { "test": "cross-env FORCE_COLOR=true jest" diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index 8d34bff34f4..89dc73d2f2b 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -34,7 +34,7 @@ "@babel/core": "7.3.4", "anser": "1.4.8", "babel-eslint": "10.0.1", - "babel-jest": "24.7.0", + "babel-jest": "24.7.1", "babel-loader": "8.0.5", "babel-preset-react-app": "^7.0.2", "chalk": "^2.4.2", @@ -48,7 +48,7 @@ "eslint-plugin-react": "7.12.4", "flow-bin": "^0.63.1", "html-entities": "1.2.1", - "jest": "24.7.0", + "jest": "24.7.1", "jest-fetch-mock": "2.1.1", "object-assign": "4.1.1", "promise": "8.0.2", diff --git a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json index 5f307df190c..05b7ba5571a 100644 --- a/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json +++ b/packages/react-scripts/fixtures/kitchensink/.template.dependencies.json @@ -1,7 +1,7 @@ { "dependencies": { "bootstrap": "4.1.1", - "jest": "24.7.0", + "jest": "24.7.1", "node-sass": "4.8.3", "normalize.css": "7.0.0", "prop-types": "15.5.6", diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 3da27d13688..237710da9d8 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/eslint-plugin": "1.4.1", "@typescript-eslint/parser": "1.4.1", "babel-eslint": "10.0.1", - "babel-jest": "24.7.0", + "babel-jest": "24.7.1", "babel-loader": "8.0.5", "babel-plugin-named-asset-import": "^0.3.1", "babel-preset-react-app": "^7.0.2", @@ -49,9 +49,9 @@ "fs-extra": "7.0.1", "html-webpack-plugin": "4.0.0-beta.5", "identity-obj-proxy": "3.0.0", - "jest": "24.7.0", + "jest": "24.7.1", "jest-environment-jsdom-fourteen": "0.1.0", - "jest-resolve": "24.7.0", + "jest-resolve": "24.7.1", "jest-watch-typeahead": "0.3.0", "mini-css-extract-plugin": "0.5.0", "optimize-css-assets-webpack-plugin": "5.0.1", From 48f82f4b108949495a320dd9c72a98ee34104980 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 20:10:44 -0700 Subject: [PATCH 20/35] More debugging --- .../fixtures/kitchensink/integration/initDOM.js | 3 +++ .../kitchensink/integration/syntax.test.js | 15 --------------- .../kitchensink/integration/webpack.test.js | 14 -------------- 3 files changed, 3 insertions(+), 29 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 8457caa8084..68b551fcae5 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -45,6 +45,9 @@ export default feature => const host = process.env.E2E_URL || 'http://www.example.org/spa:3000'; const url = `${host}#${feature}`; + // TODO: remove + console.log("Running test: ", host, url); + let window; if (process.env.E2E_FILE) { diff --git a/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js b/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js index 91d69038a48..9415c88863f 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/syntax.test.js @@ -22,7 +22,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-array-destructuring').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('array spread', async () => { @@ -31,7 +30,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-array-spread').childElementCount).toBe( 4 ); - doc.defaultView.close(); }); it('async/await', async () => { @@ -40,7 +38,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-async-await').childElementCount).toBe( 4 ); - doc.defaultView.close(); }); it('class properties', async () => { @@ -49,7 +46,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-class-properties').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('computed properties', async () => { @@ -58,7 +54,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-computed-properties').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('custom interpolation', async () => { @@ -67,7 +62,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-custom-interpolation').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('default parameters', async () => { @@ -76,7 +70,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-default-parameters').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('destructuring and await', async () => { @@ -85,7 +78,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-destructuring-and-await').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('generators', async () => { @@ -94,7 +86,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-generators').childElementCount).toBe( 4 ); - doc.defaultView.close(); }); it('object destructuring', async () => { @@ -103,7 +94,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-object-destructuring').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('object spread', async () => { @@ -112,14 +102,12 @@ describe('Integration', () => { expect( doc.getElementById('feature-object-spread').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('promises', async () => { doc = await initDOM('promises'); expect(doc.getElementById('feature-promises').childElementCount).toBe(4); - doc.defaultView.close(); }); it('rest + default', async () => { @@ -128,7 +116,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-rest-and-default').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('rest parameters', async () => { @@ -137,7 +124,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-rest-parameters').childElementCount ).toBe(4); - doc.defaultView.close(); }); it('template interpolation', async () => { @@ -146,7 +132,6 @@ describe('Integration', () => { expect( doc.getElementById('feature-template-interpolation').childElementCount ).toBe(4); - doc.defaultView.close(); }); }); }); diff --git a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js index 290fc1a2301..5f1b7df1eda 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/webpack.test.js @@ -46,7 +46,6 @@ describe('Integration', () => { /html\{/, /#feature-css-inclusion\{background:.+;color:.+}/, ]); - doc.defaultView.close(); }); it('css modules inclusion', async () => { @@ -55,13 +54,11 @@ describe('Integration', () => { /.+style_cssModulesInclusion__.+\{background:.+;color:.+}/, /.+assets_cssModulesIndexInclusion__.+\{background:.+;color:.+}/, ]); - doc.defaultView.close(); }); it('scss inclusion', async () => { doc = await initDOM('scss-inclusion'); matchCSS(doc, [/#feature-scss-inclusion\{background:.+;color:.+}/]); - doc.defaultView.close(); }); it('scss modules inclusion', async () => { @@ -70,13 +67,11 @@ describe('Integration', () => { /.+scss-styles_scssModulesInclusion.+\{background:.+;color:.+}/, /.+assets_scssModulesIndexInclusion.+\{background:.+;color:.+}/, ]); - doc.defaultView.close(); }); it('sass inclusion', async () => { doc = await initDOM('sass-inclusion'); matchCSS(doc, [/#feature-sass-inclusion\{background:.+;color:.+}/]); - doc.defaultView.close(); }); it('sass modules inclusion', async () => { @@ -85,7 +80,6 @@ describe('Integration', () => { /.+sass-styles_sassModulesInclusion.+\{background:.+;color:.+}/, /.+assets_sassModulesIndexInclusion.+\{background:.+;color:.+}/, ]); - doc.defaultView.close(); }); it('image inclusion', async () => { @@ -94,7 +88,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-image-inclusion').src).toMatch( /^data:image\/jpeg;base64.+==$/ ); - doc.defaultView.close(); }); it('no ext inclusion', async () => { @@ -103,7 +96,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-no-ext-inclusion').href).toMatch( /\/static\/media\/aFileWithoutExt\.[a-f0-9]{8}\.bin$/ ); - doc.defaultView.close(); }); it('json inclusion', async () => { @@ -112,7 +104,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-json-inclusion').textContent).toBe( 'This is an abstract.' ); - doc.defaultView.close(); }); it('linked modules', async () => { @@ -121,7 +112,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-linked-modules').textContent).toBe( '2.0.0' ); - doc.defaultView.close(); }); it('svg inclusion', async () => { @@ -129,20 +119,17 @@ describe('Integration', () => { expect(doc.getElementById('feature-svg-inclusion').src).toMatch( /\/static\/media\/logo\..+\.svg$/ ); - doc.defaultView.close(); }); it('svg component', async () => { doc = await initDOM('svg-component'); expect(doc.getElementById('feature-svg-component').textContent).toBe(''); - doc.defaultView.close(); }); it('svg in css', async () => { doc = await initDOM('svg-in-css'); matchCSS(doc, [/\/static\/media\/logo\..+\.svg/]); - doc.defaultView.close(); }); it('unknown ext inclusion', async () => { @@ -151,7 +138,6 @@ describe('Integration', () => { expect(doc.getElementById('feature-unknown-ext-inclusion').href).toMatch( /\/static\/media\/aFileWithExt\.[a-f0-9]{8}\.unknown$/ ); - doc.defaultView.close(); }); }); }); From 1a801b98d185b79288f18d46bd6f0678de8c4edb Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 20:32:33 -0700 Subject: [PATCH 21/35] Debuggg --- .../react-scripts/fixtures/kitchensink/integration/initDOM.js | 3 --- packages/react-scripts/fixtures/kitchensink/src/App.js | 4 ++++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 68b551fcae5..8457caa8084 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -45,9 +45,6 @@ export default feature => const host = process.env.E2E_URL || 'http://www.example.org/spa:3000'; const url = `${host}#${feature}`; - // TODO: remove - console.log("Running test: ", host, url); - let window; if (process.env.E2E_FILE) { diff --git a/packages/react-scripts/fixtures/kitchensink/src/App.js b/packages/react-scripts/fixtures/kitchensink/src/App.js index fb838e54d7a..aea25484f05 100644 --- a/packages/react-scripts/fixtures/kitchensink/src/App.js +++ b/packages/react-scripts/fixtures/kitchensink/src/App.js @@ -64,6 +64,10 @@ class App extends Component { componentDidMount() { const feature = window.location.hash.slice(1); + + // TODO: remove + console.log("componentDidMount:", window.location, feature); + switch (feature) { case 'array-destructuring': import('./features/syntax/ArrayDestructuring').then(f => From d0392c8e9099deb3d41855bd2d4c27e9c3a65483 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 20:40:46 -0700 Subject: [PATCH 22/35] Better logging --- packages/react-scripts/fixtures/kitchensink/src/App.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/fixtures/kitchensink/src/App.js b/packages/react-scripts/fixtures/kitchensink/src/App.js index aea25484f05..0920c3ba8dd 100644 --- a/packages/react-scripts/fixtures/kitchensink/src/App.js +++ b/packages/react-scripts/fixtures/kitchensink/src/App.js @@ -66,7 +66,7 @@ class App extends Component { const feature = window.location.hash.slice(1); // TODO: remove - console.log("componentDidMount:", window.location, feature); + console.log("componentDidMount:", window.location.href, feature); switch (feature) { case 'array-destructuring': From c29234bd9140600f59b06a35ae783ce473f33b79 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 21:04:31 -0700 Subject: [PATCH 23/35] Work around hash issue --- packages/react-scripts/fixtures/kitchensink/src/App.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/src/App.js b/packages/react-scripts/fixtures/kitchensink/src/App.js index 0920c3ba8dd..547138832f3 100644 --- a/packages/react-scripts/fixtures/kitchensink/src/App.js +++ b/packages/react-scripts/fixtures/kitchensink/src/App.js @@ -63,10 +63,12 @@ class App extends Component { } componentDidMount() { - const feature = window.location.hash.slice(1); - - // TODO: remove - console.log("componentDidMount:", window.location.href, feature); + const url = window.location.href; + // const feature = window.location.hash.slice(1); + // This works around an issue of a duplicate hash in the href + // Ex: http://localhost:3001/#array-destructuring#array-destructuring + // This seems like a jsdom bug as the URL in initDom.js appears to be correct + const feature = url.slice(url.lastIndexOf("#") + 1); switch (feature) { case 'array-destructuring': From f63365085ed49b45c323ddfbd3157ca878d280fa Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 21:14:06 -0700 Subject: [PATCH 24/35] Fix reference error --- .../react-scripts/fixtures/kitchensink/integration/initDOM.js | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 8457caa8084..de9165f947e 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -10,6 +10,7 @@ const { JSDOM, ResourceLoader } = require('jsdom'); const path = require('path'); export let fetchFile; +let fileResourceLoader; if (process.env.E2E_FILE) { const file = path.isAbsolute(process.env.E2E_FILE) From 834aecda1d185e2259522bcfb77c6fe57ed3a3fa Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 21:25:50 -0700 Subject: [PATCH 25/35] More fixes --- .../kitchensink/integration/initDOM.js | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index de9165f947e..9be880808ff 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -9,28 +9,23 @@ const fs = require('fs'); const { JSDOM, ResourceLoader } = require('jsdom'); const path = require('path'); -export let fetchFile; -let fileResourceLoader; - -if (process.env.E2E_FILE) { - const file = path.isAbsolute(process.env.E2E_FILE) +const file = + process.env.E2E_FILE && path.isAbsolute(process.env.E2E_FILE) ? process.env.E2E_FILE : path.join(process.cwd(), process.env.E2E_FILE); +const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); - const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); - - const fetchFile = url => - fs.readFileSync( - path.join(path.dirname(file), url.pathname.replace(pathPrefix, '')), - 'utf8' - ); +export const fetchFile = url => + fs.readFileSync( + path.join(path.dirname(file), url.pathname.replace(pathPrefix, '')), + 'utf8' + ); - fileResourceLoader = new class FileResourceLoader extends ResourceLoader { - fetch(url, options) { - return Promise.resolve(fetchFile(url)); - } - }(); -} +const fileResourceLoader = new class FileResourceLoader extends ResourceLoader { + fetch(url, options) { + return Promise.resolve(fetchFile(url)); + } +}(); if (!process.env.E2E_FILE && !process.env.E2E_URL) { it.only('can run jsdom (at least one of "E2E_FILE" or "E2E_URL" environment variables must be provided)', () => { From 4f08b5542f0b55b63985d4678e538e18acf728f1 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 21:38:37 -0700 Subject: [PATCH 26/35] It's getting late... --- .../fixtures/kitchensink/integration/initDOM.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 9be880808ff..88c6e938aa8 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -10,9 +10,10 @@ const { JSDOM, ResourceLoader } = require('jsdom'); const path = require('path'); const file = - process.env.E2E_FILE && path.isAbsolute(process.env.E2E_FILE) + process.env.E2E_FILE && + (path.isAbsolute(process.env.E2E_FILE) ? process.env.E2E_FILE - : path.join(process.cwd(), process.env.E2E_FILE); + : path.join(process.cwd(), process.env.E2E_FILE)); const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); export const fetchFile = url => From 604f8bc7c14968988d16ec01982fdcd09978adac Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 21:46:22 -0700 Subject: [PATCH 27/35] I wish i could run this locally --- .../fixtures/kitchensink/integration/initDOM.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 88c6e938aa8..1ffb2db7207 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -14,13 +14,14 @@ const file = (path.isAbsolute(process.env.E2E_FILE) ? process.env.E2E_FILE : path.join(process.cwd(), process.env.E2E_FILE)); -const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); -export const fetchFile = url => - fs.readFileSync( +export const fetchFile = url => { + const pathPrefix = process.env.PUBLIC_URL.replace(/^https?:\/\/[^/]+\/?/, ''); + return fs.readFileSync( path.join(path.dirname(file), url.pathname.replace(pathPrefix, '')), 'utf8' ); +}; const fileResourceLoader = new class FileResourceLoader extends ResourceLoader { fetch(url, options) { From f054eaabb5e86b64acce3c60a5414bd5bb8c5fe8 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 21:57:27 -0700 Subject: [PATCH 28/35] url wasn't a URL --- .../fixtures/kitchensink/integration/initDOM.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js index 1ffb2db7207..a5d019828da 100644 --- a/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js +++ b/packages/react-scripts/fixtures/kitchensink/integration/initDOM.js @@ -8,6 +8,7 @@ const fs = require('fs'); const { JSDOM, ResourceLoader } = require('jsdom'); const path = require('path'); +const url = require('url'); const file = process.env.E2E_FILE && @@ -24,8 +25,8 @@ export const fetchFile = url => { }; const fileResourceLoader = new class FileResourceLoader extends ResourceLoader { - fetch(url, options) { - return Promise.resolve(fetchFile(url)); + fetch(href, options) { + return Promise.resolve(fetchFile(url.parse(href))); } }(); From e7575af3655039e098b3e3c977b02dc38e719276 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 22:08:12 -0700 Subject: [PATCH 29/35] Try to fix eject issues --- .../react-scripts/scripts/utils/createJestConfig.js | 10 +++++++--- tasks/e2e-kitchensink.sh | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/packages/react-scripts/scripts/utils/createJestConfig.js b/packages/react-scripts/scripts/utils/createJestConfig.js index 384e304046e..44a8c7d8783 100644 --- a/packages/react-scripts/scripts/utils/createJestConfig.js +++ b/packages/react-scripts/scripts/utils/createJestConfig.js @@ -24,7 +24,11 @@ module.exports = (resolve, rootDir, isEjecting) => { const config = { collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts'], - setupFiles: [require.resolve('react-app-polyfill/jsdom')], + setupFiles: [ + isEjecting + ? 'react-app-polyfill/jsdom' + : require.resolve('react-app-polyfill/jsdom'), + ], setupFilesAfterEnv: setupTestsFile ? [setupTestsFile] : [], testMatch: [ @@ -34,7 +38,7 @@ module.exports = (resolve, rootDir, isEjecting) => { testEnvironment: require.resolve('jest-environment-jsdom-fourteen'), transform: { '^.+\\.(js|jsx|ts|tsx)$': isEjecting - ? require.resolve('babel-jest') + ? '/node_modules/babel-jest' : resolve('config/jest/babelTransform.js'), '^.+\\.css$': resolve('config/jest/cssTransform.js'), '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': resolve( @@ -47,7 +51,7 @@ module.exports = (resolve, rootDir, isEjecting) => { ], moduleNameMapper: { '^react-native$': 'react-native-web', - '^.+\\.module\\.(css|sass|scss)$': require.resolve('identity-obj-proxy'), + '^.+\\.module\\.(css|sass|scss)$': 'identity-obj-proxy', }, moduleFileExtensions: [...paths.moduleFileExtensions, 'node'].filter( ext => !ext.includes('mjs') diff --git a/tasks/e2e-kitchensink.sh b/tasks/e2e-kitchensink.sh index a6e1d865824..d9810d67941 100755 --- a/tasks/e2e-kitchensink.sh +++ b/tasks/e2e-kitchensink.sh @@ -153,7 +153,7 @@ E2E_URL="http://localhost:3001" \ CI=true NODE_PATH=src \ NODE_ENV=development \ BABEL_ENV=test \ - node_modules/.bin/jest --no-cache --runInBand --detectOpenHandles --config='jest.integration.config.js' + node_modules/.bin/jest --no-cache --runInBand --config='jest.integration.config.js' # Test "production" environment E2E_FILE=./build/index.html \ CI=true \ From bac450ad963add398d44b9d2eb710f411d848b09 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 22:11:02 -0700 Subject: [PATCH 30/35] More eject stuff --- packages/react-scripts/scripts/utils/createJestConfig.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/scripts/utils/createJestConfig.js b/packages/react-scripts/scripts/utils/createJestConfig.js index 44a8c7d8783..ccac149d57f 100644 --- a/packages/react-scripts/scripts/utils/createJestConfig.js +++ b/packages/react-scripts/scripts/utils/createJestConfig.js @@ -35,7 +35,7 @@ module.exports = (resolve, rootDir, isEjecting) => { '/src/**/__tests__/**/*.{js,jsx,ts,tsx}', '/src/**/?(*.)(spec|test).{js,jsx,ts,tsx}', ], - testEnvironment: require.resolve('jest-environment-jsdom-fourteen'), + testEnvironment: 'jest-environment-jsdom-fourteen', transform: { '^.+\\.(js|jsx|ts|tsx)$': isEjecting ? '/node_modules/babel-jest' From 009b5d113f2a19703259c054321ea6e8eacd6853 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Wed, 3 Apr 2019 22:43:21 -0700 Subject: [PATCH 31/35] Fix Jest watch plugins on eject --- packages/react-scripts/scripts/utils/createJestConfig.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/react-scripts/scripts/utils/createJestConfig.js b/packages/react-scripts/scripts/utils/createJestConfig.js index ccac149d57f..4300c7e480c 100644 --- a/packages/react-scripts/scripts/utils/createJestConfig.js +++ b/packages/react-scripts/scripts/utils/createJestConfig.js @@ -57,8 +57,8 @@ module.exports = (resolve, rootDir, isEjecting) => { ext => !ext.includes('mjs') ), watchPlugins: [ - require.resolve('jest-watch-typeahead/filename'), - require.resolve('jest-watch-typeahead/testname'), + 'jest-watch-typeahead/filename', + 'jest-watch-typeahead/testname', ], }; if (rootDir) { From 2abbf5aee0818e0bd9f70e665885b7feb9750055 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Thu, 4 Apr 2019 08:11:15 -0700 Subject: [PATCH 32/35] Unpin babel-jest in react-error-overlay --- packages/react-error-overlay/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index 89dc73d2f2b..e6aafaff6e6 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -34,7 +34,7 @@ "@babel/core": "7.3.4", "anser": "1.4.8", "babel-eslint": "10.0.1", - "babel-jest": "24.7.1", + "babel-jest": "^24.7.1", "babel-loader": "8.0.5", "babel-preset-react-app": "^7.0.2", "chalk": "^2.4.2", From 65fdd4f82d77f2bdaf88f366810225718b50d889 Mon Sep 17 00:00:00 2001 From: Ian Schmitz Date: Thu, 4 Apr 2019 08:12:09 -0700 Subject: [PATCH 33/35] Unpin babel-jest in react-scripts --- packages/react-scripts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index 237710da9d8..a2b6f9e5156 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/eslint-plugin": "1.4.1", "@typescript-eslint/parser": "1.4.1", "babel-eslint": "10.0.1", - "babel-jest": "24.7.1", + "babel-jest": "^24.7.1", "babel-loader": "8.0.5", "babel-plugin-named-asset-import": "^0.3.1", "babel-preset-react-app": "^7.0.2", From 715659d9da49496ac68c022a642751fc6b76a029 Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Thu, 4 Apr 2019 10:22:22 -0600 Subject: [PATCH 34/35] Pin babel-jest in react-error-overlay --- packages/react-error-overlay/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-error-overlay/package.json b/packages/react-error-overlay/package.json index e6aafaff6e6..89dc73d2f2b 100644 --- a/packages/react-error-overlay/package.json +++ b/packages/react-error-overlay/package.json @@ -34,7 +34,7 @@ "@babel/core": "7.3.4", "anser": "1.4.8", "babel-eslint": "10.0.1", - "babel-jest": "^24.7.1", + "babel-jest": "24.7.1", "babel-loader": "8.0.5", "babel-preset-react-app": "^7.0.2", "chalk": "^2.4.2", From 5988359430ebddafdd8adcf5ea3514b3c9cbf0e2 Mon Sep 17 00:00:00 2001 From: Ian Sutherland Date: Thu, 4 Apr 2019 10:22:59 -0600 Subject: [PATCH 35/35] Pin babel-jest in react-scripts --- packages/react-scripts/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/react-scripts/package.json b/packages/react-scripts/package.json index a2b6f9e5156..237710da9d8 100644 --- a/packages/react-scripts/package.json +++ b/packages/react-scripts/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/eslint-plugin": "1.4.1", "@typescript-eslint/parser": "1.4.1", "babel-eslint": "10.0.1", - "babel-jest": "^24.7.1", + "babel-jest": "24.7.1", "babel-loader": "8.0.5", "babel-plugin-named-asset-import": "^0.3.1", "babel-preset-react-app": "^7.0.2",