@samitouri / QOS-React-2 / commits / 7ce229d3b0

Made some incremental progress on Jest tests

Brian Vaughn committed Aug 15, 2019 at 09:53 UTC 7ce229d3b080ce06b9a5c7a5e667474f3255b954
9 files changed +80 -28
package.json
+4 -3
@@ -47,10 +47,10 @@
47 "error-stack-parser": "^2.0.2",
48 "eslint": "^6.1.0",
49 "eslint-config-fbjs": "^1.1.1",
50 + "eslint-plugin-babel": "^5.3.0",
51 "eslint-plugin-flowtype": "^2.25.0",
52 "eslint-plugin-jest": "^22.15.0",
53 "eslint-plugin-no-for-of-loops": "^1.0.0",
53 - "eslint-plugin-babel": "^5.3.0",
54 "eslint-plugin-react": "^6.7.1",
55 "eslint-plugin-react-internal": "link:./scripts/eslint-rules",
56 "fbjs-scripts": "^0.8.3",
@@ -61,8 +61,8 @@
61 "google-closure-compiler": "20190301.0.0",
62 "gzip-size": "^3.0.0",
63 "jasmine-check": "^1.0.0-rc.0",
64 - "jest": "^23.1.0",
65 - "jest-diff": "^23.0.1",
64 + "jest": "^23",
65 + "jest-diff": "^23",
66 "jest-snapshot-serializer-raw": "^1.1.0",
67 "minimatch": "^3.0.4",
68 "minimist": "^1.2.0",
@@ -102,6 +102,7 @@
102 "postinstall": "node node_modules/fbjs-scripts/node/check-dev-engines.js package.json && node ./scripts/flow/createFlowConfigs.js",
103 "debug-test": "cross-env NODE_ENV=development node --inspect-brk node_modules/.bin/jest --config ./scripts/jest/config.source.js --runInBand",
104 "test": "cross-env NODE_ENV=development jest --config ./scripts/jest/config.source.js",
105 + "test-devtools": "cross-env NODE_ENV=development jest --config ./scripts/jest/config.devtools.js",
106 "test-persistent": "cross-env NODE_ENV=development jest --config ./scripts/jest/config.source-persistent.js",
107 "debug-test-persistent": "cross-env NODE_ENV=development node --inspect-brk node_modules/.bin/jest --config ./scripts/jest/config.source-persistent.js --runInBand",
108 "test-prod": "cross-env NODE_ENV=production jest --config ./scripts/jest/config.source.js",
packages/react-devtools-shared/package.json
+1
@@ -8,6 +8,7 @@
8 "@reach/tooltip": "^0.2.2",
9 "clipboard-js": "^0.3.6",
10 "events": "^3.0.0",
11 + "local-storage-fallback": "^4.1.1",
12 "lodash.throttle": "^4.1.1",
13 "memoize-one": "^3.1.1",
14 "react-virtualized-auto-sizer": "^1.0.2"
packages/react-devtools-shared/src/__tests__/bridge-test.js
+1 -1
@@ -30,7 +30,7 @@ describe('Bridge', () => {
30 expect(wall.send).toHaveBeenCalledWith('shutdown');
31
32 // Verify that the Bridge doesn't send messages after shutdown.
33 - spyOn(console, 'warn');
33 + spyOnDevAndProd(console, 'warn');
34 wall.send.mockClear();
35 bridge.send('should not send');
36 jest.runAllTimers();
packages/react-devtools-shared/src/__tests__/console-test.js
+16 -14
@@ -13,23 +13,10 @@ describe('console', () => {
13 let unpatchConsole;
14
15 beforeEach(() => {
16 - const Console = require('../backend/console');
16 + const Console = require('react-devtools-shared/src/backend/console');
17 patchConsole = Console.patch;
18 unpatchConsole = Console.unpatch;
19
20 - const inject = global.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject;
21 - global.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = internals => {
22 - inject(internals);
23 -
24 - Console.registerRenderer(internals);
25 - };
26 -
27 - React = require('react');
28 - ReactDOM = require('react-dom');
29 -
30 - const utils = require('./utils');
31 - act = utils.act;
32 -
20 // Patch a fake console so we can verify with tests below.
21 // Patching the real console is too complicated,
22 // because Jest itself has hooks into it as does our test env setup.
@@ -46,7 +33,22 @@ describe('console', () => {
33
34 Console.dangerous_setTargetConsoleForTesting(fakeConsole);
35
36 + // Note the Console module only patches once,
37 + // so it's important to patch the test console before injection.
38 patchConsole();
39 +
40 + const inject = global.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject;
41 + global.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject = internals => {
42 + inject(internals);
43 +
44 + Console.registerRenderer(internals);
45 + };
46 +
47 + React = require('react');
48 + ReactDOM = require('react-dom');
49 +
50 + const utils = require('./utils');
51 + act = utils.act;
52 });
53
54 function normalizeCodeLocInfo(str) {
packages/react-devtools-shared/src/__tests__/setupEnv.js
+10 -6
@@ -1,15 +1,19 @@
1 -// @flow
1 +'use strict';
2
3 -import storage from 'local-storage-fallback';
3 +// Import test renderer and then reset modules for two reasons:
4 +// 1. We don't want test renderer connected to the DevTools hooks.
5 +// 2. This enables us to work around the on-renderer limitation.
6 +// TODO This (or the resetModules below) might be the cause of the hooks erorr in some tests
7 +const ReactTestRenderer = require.requireActual('react-test-renderer');
8
5 -// In case async/await syntax is used in a test.
6 -import 'regenerator-runtime/runtime';
9 +jest.resetModules();
10 +
11 +jest.mock('react-test-renderer', () => ReactTestRenderer);
12
13 // DevTools stores preferences between sessions in localStorage
14 if (!global.hasOwnProperty('localStorage')) {
10 - global.localStorage = storage;
15 + global.localStorage = require('local-storage-fallback').default;
16 }
17
18 // Mimic the global we set with Webpack's DefinePlugin
19 global.__DEV__ = process.env.NODE_ENV !== 'production';
15 -global.__TEST__ = process.env.NODE_ENV === 'test';
packages/react-devtools-shared/src/__tests__/utils.js
+2 -1
@@ -40,7 +40,8 @@ export async function actAsync(
40 });
41
42 if (recursivelyFlush) {
43 - while (jest.getTimerCount() > 0) {
43 + // TODO (Jest v24) Replace with jest.getTimerCount() after we upgrade Jest
44 + while (global.mockGetTimersCount() > 0) {
45 // $FlowFixMe Flow doens't know about "await act()" yet
46 await actDOM(async () => {
47 await actTestRenderer(async () => {
scripts/jest/config.devtools.js new
+27
@@ -0,0 +1,27 @@
1 +'use strict';
2 +
3 +const baseConfig = require('./config.base');
4 +
5 +module.exports = Object.assign({}, baseConfig, {
6 + testRegex: 'packages/react-devtools-shared/src/__tests__/[^]+.test.js$',
7 + modulePathIgnorePatterns: [],
8 + snapshotSerializers: [
9 + require.resolve(
10 + '../../packages/react-devtools-shared/src/__tests__/inspectedElementSerializer.js'
11 + ),
12 + require.resolve(
13 + '../../packages/react-devtools-shared/src/__tests__/storeSerializer.js'
14 + ),
15 + ],
16 + setupFiles: [
17 + ...baseConfig.setupFiles,
18 + require.resolve('./setupHostConfigs.js'),
19 + require.resolve(
20 + '../../packages/react-devtools-shared/src/__tests__/setupEnv.js'
21 + ),
22 + ],
23 + // TODO (Jest v24) Rename "setupFilesAfterEnv" after Jest upgrade
24 + setupTestFrameworkScriptFile: require.resolve(
25 + '../../packages/react-devtools-shared/src/__tests__/setupTests.js'
26 + ),
27 +});
scripts/jest/preprocessor.js
+4 -1
@@ -43,7 +43,10 @@ const babelOptions = {
43
44 // This optimization is important for extremely performance-sensitive (e.g. React source).
45 // It's okay to disable it for tests.
46 - [require.resolve('@babel/plugin-transform-block-scoping'), {throwIfClosureRequired: false}],
46 + [
47 + require.resolve('@babel/plugin-transform-block-scoping'),
48 + {throwIfClosureRequired: false},
49 + ],
50 ],
51 retainLines: true,
52 };
yarn.lock
+15 -2
@@ -1879,6 +1879,7 @@ array.prototype.find@^2.0.1:
1879 arrify@^1.0.1:
1880 version "1.0.1"
1881 resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
1882 + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=
1883
1884 arrify@^2.0.1:
1885 version "2.0.1"
@@ -3513,6 +3514,11 @@ cookie@0.4.0:
3514 resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba"
3515 integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==
3516
3517 +cookie@^0.3.1:
3518 + version "0.3.1"
3519 + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb"
3520 + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=
3521 +
3522 copy-concurrently@^1.0.0:
3523 version "1.0.5"
3524 resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@@ -7215,7 +7221,7 @@ jest-config@^23.6.0:
7221 micromatch "^2.3.11"
7222 pretty-format "^23.6.0"
7223
7218 -jest-diff@^23.0.1, jest-diff@^23.6.0:
7224 +jest-diff@^23, jest-diff@^23.6.0:
7225 version "23.6.0"
7226 resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.6.0.tgz#1500f3f16e850bb3d71233408089be099f610c7d"
7227 integrity sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==
@@ -7536,7 +7542,7 @@ jest-worker@^24.6.0:
7542 merge-stream "^1.0.1"
7543 supports-color "^6.1.0"
7544
7539 -jest@^23.1.0:
7545 +jest@^23:
7546 version "23.6.0"
7547 resolved "https://registry.yarnpkg.com/jest/-/jest-23.6.0.tgz#ad5835e923ebf6e19e7a1d7529a432edfee7813d"
7548 integrity sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==
@@ -7941,6 +7947,13 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.
7947 emojis-list "^2.0.0"
7948 json5 "^1.0.1"
7949
7950 +local-storage-fallback@^4.1.1:
7951 + version "4.1.1"
7952 + resolved "https://registry.yarnpkg.com/local-storage-fallback/-/local-storage-fallback-4.1.1.tgz#6dc964635c8e9ab6d522d7d88538f465b62bd161"
7953 + integrity sha512-Ka4rem1FOgvIaPMokxXTP8DgW8gjfAQSdJC8TGrplDug7vh3b0PZnY/9euG3O3cIGAvJLp33mMU6MJ13x6S+Pw==
7954 + dependencies:
7955 + cookie "^0.3.1"
7956 +
7957 locate-path@^2.0.0:
7958 version "2.0.0"
7959 resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"