UNPKG

rc-test

Version:
117 lines (114 loc) 4.86 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; exports.getConfig = getConfig; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2")); var _fsExtra = _interopRequireDefault(require("fs-extra")); var _jest = require("jest"); var _path = _interopRequireDefault(require("path")); var _excluded = ["setupFiles", "setupFilesAfterEnv"]; var ALIAS = { t: 'testNamePattern', w: 'maxWorkers', u: 'updateSnapshot' }; function getConfig() { var cwd = process.cwd(); var pkg = require(_path.default.resolve(cwd, 'package.json')); var setupFiles = [require.resolve("./setup.js")]; if (pkg.devDependencies['enzyme']) { if (!pkg.dependencies['enzyme-adapter-react-16'] && !pkg.devDependencies['enzyme-adapter-react-16']) { console.log('[rc-test] Legacy "enzyme-adapter-react-16" is not in the deps. Please install in dev deps!'); } setupFiles.push(require.resolve("./setupEnzyme.js")); } var config = { rootDir: cwd, testEnvironment: 'jsdom', setupFiles: setupFiles, setupFilesAfterEnv: [require.resolve("./setupAfterEnv.js")], transform: { '\\.(t|j)sx?$': require.resolve("./transformers/jsTransformer"), '\\.svg$': require.resolve("./transformers/fileTransformer") }, // transformIgnorePatterns: [ // // 加 [^/]*? 是为了兼容 tnpm 的目录结构 // // 比如:_umi-test@1.5.5@umi-test // `node_modules/(?!([^/]*?umi|[^/]*?umi-test|[^/]*?enzyme-adapter-react-16|${transformInclude.join( // '|', // )})/)`, // ], testMatch: ['**/?*.(spec|test|e2e).(j|t)s?(x)'], moduleFileExtensions: ['js', 'jsx', 'ts', 'tsx', 'json'], // moduleNameMapper: { // '\\.(css|less|sass|scss)$': require.resolve('identity-obj-proxy'), // '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': // require.resolve('./fileMock.js'), // ...(moduleNameMapper || {}), // ...(userModuleNameMapper || {}), // }, testPathIgnorePatterns: ['/node_modules/'] // 用于设置 jest worker 启动的个数 }; return config; } function _default() { var originOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var opts = (0, _objectSpread2.default)({}, originOpts); var cwd = process.cwd(); var config = getConfig(); // Merge Jest config file (support .js, .ts, .json) var userJestConfigFile = null; var possibleConfigFiles = ['jest.config.js', 'jest.config.ts', 'jest.config.json', '.jest.config.js', '.jest.config.ts', '.jest.config.json']; for (var i = 0; i < possibleConfigFiles.length; i++) { var configPath = _path.default.resolve(cwd, possibleConfigFiles[i]); if (_fsExtra.default.existsSync(configPath)) { userJestConfigFile = configPath; break; } } if (userJestConfigFile) { var userConfig = require(userJestConfigFile); userConfig = userConfig.default || userConfig; var _userConfig = userConfig, _userConfig$setupFile = _userConfig.setupFiles, setupFiles = _userConfig$setupFile === void 0 ? [] : _userConfig$setupFile, _userConfig$setupFile2 = _userConfig.setupFilesAfterEnv, setupFilesAfterEnv = _userConfig$setupFile2 === void 0 ? [] : _userConfig$setupFile2, restConfig = (0, _objectWithoutProperties2.default)(_userConfig, _excluded); config = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, config), restConfig), {}, { setupFiles: [].concat((0, _toConsumableArray2.default)(config.setupFiles), (0, _toConsumableArray2.default)(setupFiles)), setupFilesAfterEnv: [].concat((0, _toConsumableArray2.default)(config.setupFilesAfterEnv), (0, _toConsumableArray2.default)(setupFilesAfterEnv)) }); } // Fill jest alias Object.keys(ALIAS).forEach(function (key) { if (opts[key]) { opts[ALIAS[key]] = opts[key]; delete opts[key]; } }); return new Promise(function (resolve, reject) { var originEnv = process.env.NODE_ENV; process.env.NODE_ENV = 'test'; (0, _jest.runCLI)((0, _objectSpread2.default)({ config: JSON.stringify(config) }, opts), [cwd]).then(function (result) { var results = result.results; if (results.success) { resolve(results); } else { reject(new Error('Jest failed')); } }).catch(function (e) { console.log(e); }).then(function () { process.env.NODE_ENV = originEnv; }); }); }