Skip to content

Commit

Permalink
feat(tesbb): Update jest config.
Browse files Browse the repository at this point in the history
  • Loading branch information
jaywcjlove committed Sep 7, 2021
1 parent bddbfae commit 98235be
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 36 deletions.
29 changes: 23 additions & 6 deletions packages/tsbb/src/jest/babelTransform.ts
Expand Up @@ -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,
// }]
],
});
62 changes: 34 additions & 28 deletions packages/tsbb/src/jest/jest.config.ts
Expand Up @@ -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: ['<rootDir>/**/__tests__/**/*.{js,jsx,ts,tsx}', '<rootDir>/**/?(*.)(spec|test).{js,jsx,ts,tsx}'],
testURL: 'http://localhost',
collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}', '!src/**/*.d.ts'],
testMatch: ['<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}', '<rootDir>/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);
Expand Down
7 changes: 5 additions & 2 deletions packages/tsbb/src/utils/output.ts
Expand Up @@ -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`;
Expand All @@ -30,12 +31,14 @@ 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`,
);
}
}

function getPkg() {
const dir = ts.sys.getCurrentDirectory();
const pkgPath = path.resolve(dir, 'package.json');
return FS.readJSONSync(pkgPath) || {};
}
}

0 comments on commit 98235be

Please sign in to comment.