rc-test
Version:
test tools for react component
99 lines (97 loc) • 3.88 kB
JavaScript
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
var _excluded = ["setupFiles", "setupFilesAfterEnv"];
import fs from 'fs-extra';
import { runCLI } from 'jest';
import path from 'path';
var ALIAS = {
t: 'testNamePattern',
w: 'maxWorkers',
u: 'updateSnapshot'
};
export function getConfig() {
var cwd = process.cwd();
var pkg = require(path.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;
}
export default function () {
var originOpts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var opts = _objectSpread({}, originOpts);
var cwd = process.cwd();
var config = getConfig();
// Merge `jest.config.js`
var userJestConfigFile = path.resolve(cwd, 'jest.config.js');
if (fs.existsSync(userJestConfigFile)) {
var _require = require(userJestConfigFile),
_require$setupFiles = _require.setupFiles,
setupFiles = _require$setupFiles === void 0 ? [] : _require$setupFiles,
_require$setupFilesAf = _require.setupFilesAfterEnv,
setupFilesAfterEnv = _require$setupFilesAf === void 0 ? [] : _require$setupFilesAf,
restConfig = _objectWithoutProperties(_require, _excluded);
config = _objectSpread(_objectSpread(_objectSpread({}, config), restConfig), {}, {
setupFiles: [].concat(_toConsumableArray(config.setupFiles), _toConsumableArray(setupFiles)),
setupFilesAfterEnv: [].concat(_toConsumableArray(config.setupFilesAfterEnv), _toConsumableArray(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';
runCLI(_objectSpread({
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;
});
});
}