From 98235be5c458c0d4c1734cb452149b084b572fea Mon Sep 17 00:00:00 2001 From: jaywcjlove <398188662@qq.com> Date: Tue, 7 Sep 2021 23:30:15 +0800 Subject: [PATCH] feat(tesbb): Update jest config. --- packages/tsbb/src/jest/babelTransform.ts | 29 ++++++++--- packages/tsbb/src/jest/jest.config.ts | 62 +++++++++++++----------- packages/tsbb/src/utils/output.ts | 7 ++- 3 files changed, 62 insertions(+), 36 deletions(-) diff --git a/packages/tsbb/src/jest/babelTransform.ts b/packages/tsbb/src/jest/babelTransform.ts index dd162cd8..2e6aea69 100644 --- a/packages/tsbb/src/jest/babelTransform.ts +++ b/packages/tsbb/src/jest/babelTransform.ts @@ -2,13 +2,30 @@ import babelJest from 'babel-jest'; module.exports = babelJest.createTransformer({ presets: [ - require.resolve('@babel/preset-env'), - require.resolve('@babel/preset-typescript'), - require.resolve('@babel/preset-react'), + [ + require('@babel/preset-env').default, + { + targets: { + node: 'current', + }, + }, + ], + require('@babel/preset-typescript').default, + require('@babel/preset-react').default, ], plugins: [ - require.resolve('@babel/plugin-transform-runtime'), - require.resolve('@babel/plugin-proposal-class-properties'), - require.resolve('@babel/plugin-proposal-object-rest-spread'), + require('@babel/plugin-transform-runtime').default, + // require('babel-plugin-add-module-exports').default, + // require('@babel/plugin-proposal-object-rest-spread').default, + // require('babel-plugin-transform-typescript-metadata').default, + // [require('@babel/plugin-proposal-decorators').default], + // [require('@babel/plugin-transform-classes').default], + // // ["@babel/plugin-proposal-private-property-in-object", { "loose": false }], + // [require('@babel/plugin-proposal-private-property-in-object').default, { + // loose: false, + // }], + // [require('@babel/plugin-proposal-class-properties').default, { + // loose: false, + // }] ], }); diff --git a/packages/tsbb/src/jest/jest.config.ts b/packages/tsbb/src/jest/jest.config.ts index 451423a4..3a24ac96 100644 --- a/packages/tsbb/src/jest/jest.config.ts +++ b/packages/tsbb/src/jest/jest.config.ts @@ -8,65 +8,71 @@ interface IJestConfig extends Jest.Config.InitialOptions { export default (resolve: Function, rootDir: string) => { const conf: IJestConfig = { rootDir: rootDir, - /** - * Alias: -w. Specifies the maximum number of workers the worker-pool will spawn for running tests. - * In single run mode, this defaults to the number of the cores available on your machine minus one for the main thread. - * In watch mode, this defaults to half of the available cores on your machine to ensure Jest is unobtrusive and does not grind your machine to a halt. - * It may be useful to adjust this in resource limited environments like CIs but the defaults should be adequate for most use-cases. - * For environments with variable CPUs available, you can use percentage based configuration: --maxWorkers=50% - */ - maxWorkers: '50%', - collectCoverageFrom: ['src/**/*.{ts,tsx}', '!src/**/*.d.ts'], - testMatch: ['/**/__tests__/**/*.{js,jsx,ts,tsx}', '/**/?(*.)(spec|test).{js,jsx,ts,tsx}'], - testURL: 'http://localhost', + collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts'], + testMatch: ['/src/**/__tests__/**/*.{js,jsx,ts,tsx}', '/src/**/*.{spec,test}.{js,jsx,ts,tsx}'], + testEnvironment: 'jsdom', + testRunner: require.resolve('jest-circus/runner'), transform: { - '^.+\\.(js|jsx|ts|tsx)$': resolve('lib/jest/babelTransform.js'), - '^.+\\.(css|less|sass|scss)$': resolve('lib/jest/cssTransform.js'), - '^(?!.*\\.(js|jsx|ts|tsx|css|json)$)': resolve('lib/jest/fileTransform.js'), + '^.+\\.(js|jsx|mjs|cjs|ts|tsx)$': resolve('lib/jest/babelTransform.js'), + '^.+\\.css$': resolve('lib/jest/cssTransform.js'), + '^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)': resolve('lib/jest/fileTransform.js'), }, - transformIgnorePatterns: ['[/\\\\]node_modules[/\\\\].+\\.(js|jsx|ts|tsx)$'], + transformIgnorePatterns: [ + '[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$', + '^.+\\.module\\.(css|less|styl|sass|scss)$', + ], moduleNameMapper: { - '^.+\\.module\\.(css|less|sass|scss)$': 'identity-obj-proxy', + '^react-native$': 'react-native-web', + '^.+\\.module\\.(css|sass|scss)$': 'identity-obj-proxy', }, + watchPlugins: ['jest-watch-typeahead/filename', 'jest-watch-typeahead/testname'], + resetMocks: true, }; const overrides: IJestConfig = Object.assign({}, require(path.join(rootDir, 'package.json')).jest); if (overrides) { const supportedKeys: string[] = [ + 'clearMocks', 'collectCoverageFrom', + 'coveragePathIgnorePatterns', 'coverageReporters', 'coverageThreshold', - 'globals', - 'mapCoverage', - 'moduleFileExtensions', - 'modulePathIgnorePatterns', + 'displayName', + 'extraGlobals', + 'globalSetup', + 'globalTeardown', 'moduleNameMapper', - 'modulePaths', + 'resetMocks', + 'resetModules', + 'restoreMocks', 'snapshotSerializers', - 'setupFiles', 'testMatch', - 'testEnvironmentOptions', - 'testResultsProcessor', 'transform', 'transformIgnorePatterns', - 'reporters', + 'watchPathIgnorePatterns', ]; supportedKeys.forEach((key: string) => { if (overrides.hasOwnProperty(key)) { - conf[key] = overrides[key]; + if (Array.isArray(conf[key]) || typeof conf[key] !== 'object') { + // for arrays or primitive types, directly override the config key + conf[key] = overrides[key]; + } else { + // for object types, extend gracefully + conf[key] = Object.assign({}, conf[key], overrides[key]); + } delete overrides[key]; } }); const unsupportedKeys = Object.keys(overrides); if (unsupportedKeys.length) { console.error( - '\x1b[1;31mOut of the box, kkt only supports overriding \x1b[0m' + + '\x1b[1;31mOut of the box, TSBB only supports overriding \x1b[0m' + '\x1b[1;31mthese Jest options:\x1b[0m\n\n' + supportedKeys.map((key) => ' \u2022 ' + key).join('\n') + '.\n\n' + '\x1b[1;31mThese options in your package.json Jest configuration \x1b[0m' + - '\x1b[1;31mare not currently supported by kkt:\x1b[0m\n\n' + + '\x1b[1;31mare not currently supported by TSBB App:\x1b[0m\n\n' + unsupportedKeys.map((key) => ' \u2022 ' + key).join('\n'), ); process.exit(1); diff --git a/packages/tsbb/src/utils/output.ts b/packages/tsbb/src/utils/output.ts index 130dfb3f..cb7a8a5c 100644 --- a/packages/tsbb/src/utils/output.ts +++ b/packages/tsbb/src/utils/output.ts @@ -18,6 +18,7 @@ export function copyFiles(src: string, dest: string) { } export function outputLog(filename: string) { + filename = path.relative(process.cwd(), filename); const pkg = getPkg(); const extname = path.extname(filename).replace('.', ''); const name = `\x1b[35m ${pkg.name}\x1b[0m`; @@ -30,7 +31,9 @@ export function outputLog(filename: string) { } else if (extname == 'js') { console.log(`♻️ ${name}\x1b[33;1m JS \x1b[0m ┈┈▶ \x1b[32;1m${filename}\x1b[0m`); } else { - console.log(`♻️ ${name}\x1b[37;1m ${(extname || '***').toLocaleUpperCase()} \x1b[0m ┈┈▶ \x1b[32;1m${filename}\x1b[0m`); + console.log( + `♻️ ${name}\x1b[37;1m ${(extname || '***').toLocaleUpperCase()} \x1b[0m ┈┈▶ \x1b[32;1m${filename}\x1b[0m`, + ); } } @@ -38,4 +41,4 @@ function getPkg() { const dir = ts.sys.getCurrentDirectory(); const pkgPath = path.resolve(dir, 'package.json'); return FS.readJSONSync(pkgPath) || {}; -} \ No newline at end of file +}