From 2c593cb560413652a3ae93897d13b93128b3ffcb Mon Sep 17 00:00:00 2001 From: Quinn Slack Date: Sat, 11 May 2019 16:16:08 -0700 Subject: [PATCH] use Babel instead of ts-jest to speed up and simplify tests Removed typechecking from jest tests (by removing ts-jest and just using Babel's TypeScript transpilation, per https://jestjs.io/docs/en/getting-started#using-typescript). This makes tests run faster (~2s vs. ~9s for a single test after making a change to a `.ts` file) and simplifies their build configuration (by removing an unnecessary tool, ts-jest, from our toolchain). You should instead rely on your editor (and CI) for typechecking. Babel is a good choice because it is the standard for transpilation, and tslint is being deprecated in favor of Babel + eslint (so we need to switch soon anyway to get the latest lint rules, such as those for React hooks). --- babel.config.js | 42 +++++++----- jest.config.base.js | 11 ---- package.json | 6 +- .../CompletionWidget.test.tsx.snap | 2 +- .../__snapshots__/HoverOverlay.test.tsx.snap | 2 +- .../HierarchicalLocationsView.test.tsx.snap | 21 +----- yarn.lock | 64 ++++++++----------- 7 files changed, 60 insertions(+), 88 deletions(-) diff --git a/babel.config.js b/babel.config.js index 1a6db4e22030..3c9f43292f59 100644 --- a/babel.config.js +++ b/babel.config.js @@ -1,20 +1,30 @@ // @ts-check -/** @type {import('@babel/core').TransformOptions} */ -const config = { - presets: [ - [ - '@babel/preset-env', - { - modules: false, - useBuiltIns: 'entry', - corejs: 3, - }, +/** @type {import('@babel/core').ConfigFunction} */ +module.exports = api => { + const isTest = api.env('test') + api.cache.forever() + + return { + presets: [ + [ + '@babel/preset-env', + { + // Node (used for testing) doesn't support modules, so compile to CommonJS for testing. + modules: isTest ? 'commonjs' : false, + useBuiltIns: 'entry', + corejs: 3, + }, + ], + '@babel/preset-typescript', + '@babel/preset-react', ], - '@babel/preset-typescript', - '@babel/preset-react', - ], - plugins: ['@babel/plugin-syntax-dynamic-import', 'babel-plugin-lodash'], -} + plugins: [ + '@babel/plugin-syntax-dynamic-import', + 'babel-plugin-lodash', -module.exports = config + // Node 12 (released 2019 Apr 23) supports these natively, so we can remove this plugin soon. + '@babel/plugin-proposal-class-properties', + ], + } +} diff --git a/jest.config.base.js b/jest.config.base.js index a0f4de9548f0..5d5def4d9105 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -11,10 +11,7 @@ const config = { collectCoverage: !!process.env.CI, coverageDirectory: '/coverage', coveragePathIgnorePatterns: [/\.test\.tsx?$/.source], - moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json'], - preset: 'ts-jest/presets/js-with-ts', roots: ['/src'], - transform: { '^.+\\.[jt]sx?$': 'ts-jest' }, // Transform packages that do not distribute CommonJS packages (typically because they only distribute ES6 // modules). If you get an error from jest like "Jest encountered an unexpected token. ... SyntaxError: @@ -30,14 +27,6 @@ const config = { // By default, don't clutter `yarn test --watch` output with the full coverage table. To see it, use the // `--coverageReporters text` jest option. coverageReporters: ['json', 'lcov', 'text-summary'], - globals: { - 'ts-jest': { - diagnostics: { - pathRegex: '(browser|shared|web)/src', - warnOnly: true, - }, - }, - }, setupFiles: [path.join(__dirname, 'shared/dev/mockDate.js'), path.join(__dirname, 'shared/dev/globalThis.js')], } diff --git a/package.json b/package.json index 1bfe2d53fe63..2cae59334940 100644 --- a/package.json +++ b/package.json @@ -47,8 +47,10 @@ }, "devDependencies": { "@babel/core": "^7.2.2", + "@babel/plugin-proposal-class-properties": "^7.2.3", "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/preset-env": "^7.2.3", + "@babel/preset-react": "^7.0.0", + "@babel/preset-typescript": "^7.3.3", "@babel/runtime": "^7.2.0", "@gql2ts/from-schema": "^1.10.1", "@gql2ts/language-typescript": "^1.9.0", @@ -129,6 +131,7 @@ "@types/webpack-dev-server": "3.1.5", "@types/whatwg-url": "6.4.0", "autoprefixer": "^9.5.1", + "babel-jest": "^24.8.0", "babel-loader": "^8.0.5", "babel-plugin-lodash": "^3.3.4", "browserslist": "^4.5.6", @@ -183,7 +186,6 @@ "style-loader": "^0.23.1", "stylelint": "^10.0.1", "terser-webpack-plugin": "^1.2.3", - "ts-jest": "^24.0.2", "ts-loader": "^6.0.0", "ts-node": "^8.1.0", "tslint": "^5.16.0", diff --git a/shared/src/components/completion/__snapshots__/CompletionWidget.test.tsx.snap b/shared/src/components/completion/__snapshots__/CompletionWidget.test.tsx.snap index 86198c56bb8e..347034203738 100644 --- a/shared/src/components/completion/__snapshots__/CompletionWidget.test.tsx.snap +++ b/shared/src/components/completion/__snapshots__/CompletionWidget.test.tsx.snap @@ -11,7 +11,7 @@ Object { } } > - - diff --git a/shared/src/panel/views/__snapshots__/HierarchicalLocationsView.test.tsx.snap b/shared/src/panel/views/__snapshots__/HierarchicalLocationsView.test.tsx.snap index d90e720b85e2..fc6c6160d67f 100644 --- a/shared/src/panel/views/__snapshots__/HierarchicalLocationsView.test.tsx.snap +++ b/shared/src/panel/views/__snapshots__/HierarchicalLocationsView.test.tsx.snap @@ -37,12 +37,7 @@ exports[` displays a single location when complete d="M23,42.4c1.3,0,2.4-1.1,2.4-2.4s-1.1-2.4-2.4-2.4s-2.4,1.1-2.4,2.4S21.7,42.4,23,42.4z" /> @@ -249,12 +244,7 @@ exports[` displays multiple locations grouped by fi d="M23,42.4c1.3,0,2.4-1.1,2.4-2.4s-1.1-2.4-2.4-2.4s-2.4,1.1-2.4,2.4S21.7,42.4,23,42.4z" /> @@ -417,12 +407,7 @@ exports[` displays partial locations before complet d="M23,42.4c1.3,0,2.4-1.1,2.4-2.4s-1.1-2.4-2.4-2.4s-2.4,1.1-2.4,2.4S21.7,42.4,23,42.4z" /> diff --git a/yarn.lock b/yarn.lock index 267a6426f022..032ee496dbbe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -247,7 +247,7 @@ "@babel/helper-remap-async-to-generator" "^7.1.0" "@babel/plugin-syntax-async-generators" "^7.2.0" -"@babel/plugin-proposal-class-properties@7.3.0", "@babel/plugin-proposal-class-properties@^7.3.0": +"@babel/plugin-proposal-class-properties@7.3.0", "@babel/plugin-proposal-class-properties@^7.2.3", "@babel/plugin-proposal-class-properties@^7.3.0": version "7.3.0" resolved "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.3.0.tgz#272636bc0fa19a0bc46e601ec78136a173ea36cd" integrity sha512-wNHxLkEKTQ2ay0tnsam2z7fGZUi+05ziDJflEt3AZTP3oXLKHJp9HqhfroB/vdMvt3sda9fAbq7FsG8QPDrZBg== @@ -681,7 +681,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typescript@^7.1.0": +"@babel/plugin-transform-typescript@^7.1.0", "@babel/plugin-transform-typescript@^7.3.2": version "7.4.0" resolved "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.4.0.tgz#0389ec53a34e80f99f708c4ca311181449a68eb1" integrity sha512-U7/+zKnRZg04ggM/Bm+xmu2B/PrwyDQTT/V89FXWYWNMxBDwSx56u6jtk9SEbfLFbZaEI72L+5LPvQjeZgFCrQ== @@ -747,7 +747,7 @@ js-levenshtein "^1.1.3" semver "^5.3.0" -"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.2.3", "@babel/preset-env@^7.4.1": +"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.4.1": version "7.4.4" resolved "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.4.4.tgz#b6f6825bfb27b3e1394ca3de4f926482722c1d6f" integrity sha512-FU1H+ACWqZZqfw1x2G1tgtSSYSfxJLkpaUQL37CenULFARDo+h4xJoVHzRoHbK+85ViLciuI7ME4WTIhFRBBlw== @@ -828,6 +828,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-transform-typescript" "^7.1.0" +"@babel/preset-typescript@^7.3.3": + version "7.3.3" + resolved "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.3.3.tgz#88669911053fa16b2b276ea2ede2ca603b3f307a" + integrity sha512-mzMVuIP4lqtn4du2ynEfdO0+RYcslwrZiJHXu4MGaC1ctJiW2fyaeDrtjJGs7R/KebZ1sgowcIoWf4uRpEfKEg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-typescript" "^7.3.2" + "@babel/runtime-corejs2@^7.2.0": version "7.4.2" resolved "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.2.tgz#a0cec2c41717fa415e9c204f32b603d88b1796c2" @@ -4187,13 +4195,6 @@ browserslist@^4.0.0, browserslist@^4.3.4, browserslist@^4.5.2, browserslist@^4.5 electron-to-chromium "^1.3.127" node-releases "^1.1.17" -bs-logger@0.x: - version "0.2.6" - resolved "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" - integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== - dependencies: - fast-json-stable-stringify "2.x" - bser@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -4229,7 +4230,7 @@ buffer-fill@^1.0.0: resolved "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= -buffer-from@1.x, buffer-from@^1.0.0: +buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== @@ -6696,7 +6697,7 @@ fast-glob@^2.0.2, fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" -fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= @@ -9205,13 +9206,6 @@ json3@^3.3.2: resolved "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" integrity sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE= -json5@2.x, json5@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" - integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== - dependencies: - minimist "^1.2.0" - json5@^0.5.0: version "0.5.1" resolved "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -9224,6 +9218,13 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" +json5@^2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + jsonfile@^2.1.0: version "2.4.0" resolved "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" @@ -9727,7 +9728,7 @@ make-dir@^1.0.0, make-dir@^1.3.0: dependencies: pify "^3.0.0" -make-error@1.x, make-error@^1.1.1, make-error@^1.3.5: +make-error@^1.1.1, make-error@^1.3.5: version "1.3.5" resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== @@ -10196,7 +10197,7 @@ mkdirp-promise@^5.0.1: dependencies: mkdirp "*" -mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@0.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@*, mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -13066,7 +13067,7 @@ resolve@1.1.7: resolved "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@1.x, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: +resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1: version "1.10.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz#664842ac960795bbe758221cdccda61fb64b5f18" integrity sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA== @@ -13317,7 +13318,7 @@ semver-greatest-satisfied-range@^1.1.0: dependencies: sver-compat "^1.5.0" -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0: version "5.6.0" resolved "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== @@ -14736,21 +14737,6 @@ trough@^1.0.0: dependencies: glob "^7.1.2" -ts-jest@^24.0.2: - version "24.0.2" - resolved "https://registry.npmjs.org/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" - integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== - dependencies: - bs-logger "0.x" - buffer-from "1.x" - fast-json-stable-stringify "2.x" - json5 "2.x" - make-error "1.x" - mkdirp "0.x" - resolve "1.x" - semver "^5.5" - yargs-parser "10.x" - ts-key-enum@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.0.tgz#35c98f0bc2c733fffe4225c4febe039b05f1c686" @@ -15763,7 +15749,7 @@ yallist@^3.0.0, yallist@^3.0.2: resolved "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== -yargs-parser@10.x, yargs-parser@^10.0.0: +yargs-parser@^10.0.0: version "10.1.0" resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==