From 7defd138f9f1e82fefbc63d4d6b37ea3c89a38cf Mon Sep 17 00:00:00 2001 From: Daniel K Date: Thu, 5 Nov 2020 12:56:04 +0100 Subject: [PATCH] Run tests across all packages The `yarn test` tests all packages while eg. `yarn mobx test` will test that package only. --- .circleci/config.yml | 66 +++++-------------- .eslintrc.js | 20 ++---- jest.base.config.js | 25 +++++++ jest.config.js | 5 ++ package.json | 5 +- packages/mobx-undecorate/.gitignore | 5 -- packages/mobx-undecorate/jest.config.js | 11 +--- packages/mobx-undecorate/package.json | 8 +-- packages/mobx-undecorate/src/undecorate.ts | 3 + packages/mobx-undecorate/tsconfig.test.json | 7 -- packages/mobx/jest.config.js | 15 ++--- .../{__tests__/setup.ts => jest.setup.ts} | 4 +- packages/mobx/package.json | 17 +++-- packages/mobx/scripts/prepublish.js | 11 ++++ packages/mobx/tsconfig.test.json | 8 --- tsconfig.json | 6 +- tsconfig.test.json | 9 +-- yarn.lock | 42 +++++------- 18 files changed, 115 insertions(+), 152 deletions(-) create mode 100644 jest.base.config.js create mode 100644 jest.config.js delete mode 100644 packages/mobx-undecorate/.gitignore delete mode 100644 packages/mobx-undecorate/tsconfig.test.json rename packages/mobx/{__tests__/setup.ts => jest.setup.ts} (50%) create mode 100644 packages/mobx/scripts/prepublish.js delete mode 100644 packages/mobx/tsconfig.test.json diff --git a/.circleci/config.yml b/.circleci/config.yml index f7f2e6f907..3cf57f9275 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -11,31 +11,34 @@ orbs: node: circleci/node@4.0.1 jobs: - mobx-build: + install: executor: node-executor steps: - checkout - node/install-packages: pkg-manager: yarn - - - run: yarn mobx build - persist_to_workspace: root: . - paths: - - ./* + paths: [./*] - mobx-check: + test: executor: node-executor steps: - attach_workspace: at: . - - run: yarn mobx test:check + - run: yarn lint + - run: yarn test -i + - run: yarn mobx test:types + - run: yarn mobx-react test:types - mobx-performance: + mobx: executor: node-executor steps: - attach_workspace: at: . + - run: yarn mobx build + - run: yarn mobx test:flow + - run: yarn mobx test:size - run: command: yarn mobx test:performance environment: @@ -44,47 +47,12 @@ jobs: path: packages/mobx/perf_report destination: mobx-perf - mobx-test: - executor: node-executor - steps: - - attach_workspace: - at: . - - run: yarn mobx test -i - - mobx-size: - executor: node-executor - steps: - - attach_workspace: - at: . - - - run: yarn mobx test:size - - mobx-undecorate-test: - executor: node-executor - steps: - - checkout - - node/install-packages: - pkg-manager: yarn - - run: yarn mobx-undecorate test - workflows: version: 2 - mobx: - jobs: - - mobx-build - - mobx-check: - requires: - - mobx-build - - mobx-performance: - requires: - - mobx-build - - mobx-test: - requires: - - mobx-build - - mobx-size: - requires: - - mobx-build - - mobx-undecorate: + test-all: jobs: - - mobx-undecorate-test \ No newline at end of file + - install + - test: + requires: [install] + - mobx: + requires: [install] diff --git a/.eslintrc.js b/.eslintrc.js index c6ee1d2c9b..fa014dda1c 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,7 +3,9 @@ module.exports = { plugins: ["@typescript-eslint"], extends: "eslint:recommended", env: { - es6: true + browser: true, + es6: true, + node: true }, parserOptions: { ecmaVersion: 6, @@ -18,7 +20,8 @@ module.exports = { "no-undef": "off", "no-extra-semi": "off", // doesn't get along well with prettier "no-unused-vars": "off", // got typescript for that, - "no-redeclare": "off" // No idea what it does, but it dies + "no-redeclare": "off", // No idea what it does, but it dies + "require-yield": "off" // Doesn't work with TS }, globals: { process: "readable", @@ -27,16 +30,5 @@ module.exports = { setTimeout: "readable", clearTimeout: "readable", module: "writable" - }, - overrides: [ - { - files: ["**/*.ts"], - rules: { - // Things that don't play nicely with TS: - "require-yield": "off", - "no-unused-vars": "off", - "no-extra-semi": "off" - } - } - ] + } } diff --git a/jest.base.config.js b/jest.base.config.js new file mode 100644 index 0000000000..7da7285bdf --- /dev/null +++ b/jest.base.config.js @@ -0,0 +1,25 @@ +const fs = require("fs") +const path = require("path") + +const tsConfig = "tsconfig.test.json" + +module.exports = function buildConfig(packageDirectory, pkgConfig) { + const packageName = require(`${packageDirectory}/package.json`).name + const packageTsconfig = path.resolve(packageDirectory, tsConfig) + return { + preset: "ts-jest/presets/js-with-ts", + globals: { + __DEV__: true, + "ts-jest": { + tsconfig: fs.existsSync(packageTsconfig) + ? packageTsconfig + : path.resolve(__dirname, tsConfig) + } + }, + testRegex: "__tests__/.*\\.(j|t)sx?$", + coverageDirectory: "/coverage/", + collectCoverageFrom: ["/packages/*/src/**/*.{ts,tsx}"], + displayName: packageName, + ...pkgConfig + } +} diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 0000000000..bb763c7c51 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,5 @@ +const buildConfig = require("./jest.base.config") + +module.exports = buildConfig(__dirname, { + projects: ["/packages/*/jest.config.js"] +}) diff --git a/package.json b/package.json index 358803ad79..124420cce3 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "packages/*" ], "scripts": { + "test": "jest", + "lint": "eslint packages/*/src/**/*", "prettier": "prettier --write **/*.{js,ts,md}", "release": "yarn changeset publish", "mobx": "yarn workspace mobx", @@ -23,7 +25,6 @@ "@types/node": "12", "@typescript-eslint/eslint-plugin": "^4.6.1", "@typescript-eslint/parser": "^4.1.1", - "babel-jest": "^26.6.2", "coveralls": "^3.1.0", "eslint": "^6.8.0", "execa": "^4.1.0", @@ -38,7 +39,7 @@ "pretty-quick": "3.1.0", "serializr": "^2.0.3", "tape": "^5.0.1", - "ts-jest": "^26.4.3", + "ts-jest": "26.4.1", "tsdx": "^0.14.1", "typescript": "^4.0.2" }, diff --git a/packages/mobx-undecorate/.gitignore b/packages/mobx-undecorate/.gitignore deleted file mode 100644 index 74a8cf65b4..0000000000 --- a/packages/mobx-undecorate/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# Both are copied during the build -README.md -LICENSE - -temp \ No newline at end of file diff --git a/packages/mobx-undecorate/jest.config.js b/packages/mobx-undecorate/jest.config.js index b2f6b1e642..1cb34b6040 100644 --- a/packages/mobx-undecorate/jest.config.js +++ b/packages/mobx-undecorate/jest.config.js @@ -1,10 +1,5 @@ -module.exports = { - preset: "ts-jest/presets/js-with-ts", +const buildConfig = require("../../jest.base.config") - globals: { - "ts-jest": { - tsconfig: "tsconfig.test.json" - } - }, +module.exports = buildConfig(__dirname, { testRegex: "__tests__/.*\\.spec\\.(t|j)sx?$" -} +}) diff --git a/packages/mobx-undecorate/package.json b/packages/mobx-undecorate/package.json index 0917b74ea5..1b93052fea 100644 --- a/packages/mobx-undecorate/package.json +++ b/packages/mobx-undecorate/package.json @@ -3,9 +3,6 @@ "version": "1.0.4", "description": "Migrate MobX 4/5 to MobX 6", "bin": "cli.js", - "scripts": { - "test": "jest" - }, "repository": { "type": "git", "url": "https://github.com/mobxjs/mobx.git" @@ -42,5 +39,8 @@ }, "keywords": [ "mobx" - ] + ], + "scripts": { + "test": "jest" + } } diff --git a/packages/mobx-undecorate/src/undecorate.ts b/packages/mobx-undecorate/src/undecorate.ts index c882f6ee6a..ff7e798b0a 100644 --- a/packages/mobx-undecorate/src/undecorate.ts +++ b/packages/mobx-undecorate/src/undecorate.ts @@ -399,6 +399,9 @@ export default function transform( } function warn(msg: string, node: Node) { + if (process.env.NODE_ENV === "test") { + return + } const line = lines[node.loc!.start.line - 1] const shortline = line.replace(/^\s*/, "") console.warn( diff --git a/packages/mobx-undecorate/tsconfig.test.json b/packages/mobx-undecorate/tsconfig.test.json deleted file mode 100644 index 5f4512d7bc..0000000000 --- a/packages/mobx-undecorate/tsconfig.test.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../../tsconfig.test.json", - "compilerOptions": { - "allowJs": true - }, - "include": ["src/**/*.ts", "__tests__/**/*.tsx?"] -} diff --git a/packages/mobx/jest.config.js b/packages/mobx/jest.config.js index f5c22f39b8..f0af2b1e22 100644 --- a/packages/mobx/jest.config.js +++ b/packages/mobx/jest.config.js @@ -1,13 +1,6 @@ -module.exports = { - preset: "ts-jest/presets/js-with-ts", +const buildConfig = require("../../jest.base.config") - globals: { - __DEV__: true, - "ts-jest": { - tsconfig: "tsconfig.test.json" - } - }, - setupFilesAfterEnv: ["/__tests__/setup.ts"], +module.exports = buildConfig(__dirname, { testRegex: "__tests__/v[4|5]/base/.*\\.(t|j)sx?$", - collectCoverageFrom: ["/src/**/*.ts"] -} + setupFilesAfterEnv: [`/jest.setup.ts`] +}) diff --git a/packages/mobx/__tests__/setup.ts b/packages/mobx/jest.setup.ts similarity index 50% rename from packages/mobx/__tests__/setup.ts rename to packages/mobx/jest.setup.ts index 221e45bdf4..d7ff3472ce 100644 --- a/packages/mobx/__tests__/setup.ts +++ b/packages/mobx/jest.setup.ts @@ -1,6 +1,8 @@ -import { configure, _resetGlobalState } from "../src/mobx" +import { configure, _resetGlobalState } from "./src/mobx" beforeEach(() => { + // @ts-ignore + global.__DEV__ = true _resetGlobalState() configure({ enforceActions: "never" diff --git a/packages/mobx/package.json b/packages/mobx/package.json index 2cac002ac4..da14bf0aad 100644 --- a/packages/mobx/package.json +++ b/packages/mobx/package.json @@ -10,6 +10,13 @@ "react-native": "dist/mobx.esm.js", "source": "src/mobx.ts", "typings": "dist/mobx.d.ts", + "files": [ + "src", + "dist", + "LICENSE", + "CHANGELOG.md", + "README.md" + ], "sideEffects": false, "repository": { "type": "git", @@ -24,13 +31,6 @@ "bugs": { "url": "https://github.com/mobxjs/mobx/issues" }, - "files": [ - "src", - "dist", - "LICENSE", - "CHANGELOG.md", - "README.md" - ], "homepage": "https://mobx.js.org/", "dependencies": {}, "devDependencies": { @@ -65,8 +65,7 @@ "perf": "scripts/perf.sh", "test:performance": "yarn perf proxy && yarn perf legacy", "test:mixed-versions": "yarn test --testRegex mixed-versions", - "test:check": "yarn test:types && yarn lint", - "test:types": "tsc --noEmit && yarn test:flow", + "test:types": "tsc --noEmit", "test:flow": "flow check", "test:coverage": "yarn test -i --coverage", "test:size": "yarn import-size --report . observable computed autorun action", diff --git a/packages/mobx/scripts/prepublish.js b/packages/mobx/scripts/prepublish.js new file mode 100644 index 0000000000..279ee15df6 --- /dev/null +++ b/packages/mobx/scripts/prepublish.js @@ -0,0 +1,11 @@ +const fs = require("fs-extra") +const path = require("path") +const execa = require("execa") + +const run = () => { + fs.copySync("flow-typed/mobx.js", "dist/index.js.flow") + fs.copySync("../../README.md", "./README.md") + fs.copySync("../../LICENSE", "./LICENSE") +} + +run() diff --git a/packages/mobx/tsconfig.test.json b/packages/mobx/tsconfig.test.json deleted file mode 100644 index 5d6a94f272..0000000000 --- a/packages/mobx/tsconfig.test.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "../../tsconfig.test.json", - "compilerOptions": { - "allowJs": true, - "strictPropertyInitialization": false - }, - "include": ["src/**/*.ts", "__tests__/**/*.ts", "__tests__/**/*.js"] -} diff --git a/tsconfig.json b/tsconfig.json index 1b94fdedbf..bc84f1d33c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,7 +15,9 @@ "noImplicitAny": false, "noImplicitThis": false, "noEmit": true, - "experimentalDecorators": false, - "useDefineForClassFields": true + "experimentalDecorators": true, + "useDefineForClassFields": true, + "jsx": "react", + "esModuleInterop": true } } diff --git a/tsconfig.test.json b/tsconfig.test.json index 9bb91bec15..54f3354683 100644 --- a/tsconfig.test.json +++ b/tsconfig.test.json @@ -1,12 +1,7 @@ { "extends": "./tsconfig.json", "compilerOptions": { - "module": "commonjs", - "lib": ["esnext"], - "noUnusedLocals": false, - "moduleResolution": "node", - "experimentalDecorators": true, - "useDefineForClassFields": true, - "allowSyntheticDefaultImports": true + "allowJs": true, + "noUnusedLocals": false } } diff --git a/yarn.lock b/yarn.lock index 5b2cdb9b16..053b0dae72 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1264,13 +1264,6 @@ slash "^3.0.0" strip-ansi "^6.0.0" -"@jest/create-cache-key-function@^26.5.0": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/create-cache-key-function/-/create-cache-key-function-26.6.2.tgz#04cf439207a4fd12418d8aee551cddc86f9ac5f5" - integrity sha512-LgEuqU1f/7WEIPYqwLPIvvHuc1sB6gMVbT6zWhin3txYUNYK/kGQrC1F2WR4gR34YlI9bBtViTm5z98RqVZAaw== - dependencies: - "@jest/types" "^26.6.2" - "@jest/environment@^25.5.0": version "25.5.0" resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.5.0.tgz#aa33b0c21a716c65686638e7ef816c0e3a0c7b37" @@ -10184,39 +10177,38 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= -ts-jest@^25.3.1: - version "25.5.1" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" - integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== +ts-jest@26.4.1: + version "26.4.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.1.tgz#08ec0d3fc2c3a39e4a46eae5610b69fafa6babd0" + integrity sha512-F4aFq01aS6mnAAa0DljNmKr/Kk9y4HVZ1m6/rtJ0ED56cuxINGq3Q9eVAh+z5vcYKe5qnTMvv90vE8vUMFxomg== dependencies: + "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" + jest-util "^26.1.0" json5 "2.x" lodash.memoize "4.x" make-error "1.x" - micromatch "4.x" - mkdirp "0.x" - semver "6.x" - yargs-parser "18.x" + mkdirp "1.x" + semver "7.x" + yargs-parser "20.x" -ts-jest@^26.4.3: - version "26.4.3" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.3.tgz#d153a616033e7ec8544b97ddbe2638cbe38d53db" - integrity sha512-pFDkOKFGY+nL9v5pkhm+BIFpoAuno96ff7GMnIYr/3L6slFOS365SI0fGEVYx2RKGji5M2elxhWjDMPVcOCdSw== +ts-jest@^25.3.1: + version "25.5.1" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.5.1.tgz#2913afd08f28385d54f2f4e828be4d261f4337c7" + integrity sha512-kHEUlZMK8fn8vkxDjwbHlxXRB9dHYpyzqKIGDNxbzs+Rz+ssNDSDNusEK8Fk/sDd4xE6iKoQLfFkFVaskmTJyw== dependencies: - "@jest/create-cache-key-function" "^26.5.0" - "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" - jest-util "^26.1.0" json5 "2.x" lodash.memoize "4.x" make-error "1.x" - mkdirp "1.x" - semver "7.x" - yargs-parser "20.x" + micromatch "4.x" + mkdirp "0.x" + semver "6.x" + yargs-parser "18.x" tsconfig-paths@^3.9.0: version "3.9.0"