rc-test
Version:
test tools for react component
117 lines (114 loc) • 4.86 kB
JavaScript
;
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;
});
});
}