umi-test
Version:
Test based on jest.
149 lines (114 loc) • 5.71 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = _default;
function _react() {
const data = _interopRequireDefault(require("react"));
_react = function _react() {
return data;
};
return data;
}
function _jest() {
const data = _interopRequireDefault(require("jest"));
_jest = function _jest() {
return data;
};
return data;
}
function _args() {
const data = require("jest-cli/build/cli/args");
_args = function _args() {
return data;
};
return data;
}
function _path() {
const data = require("path");
_path = function _path() {
return data;
};
return data;
}
function _fs() {
const data = require("fs");
_fs = function _fs() {
return data;
};
return data;
}
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
const debug = require('debug')('umi-test');
process.env.NODE_ENV = 'test';
process.env.IS_FROM_UMI_TEST = 1;
function _default(originOpts = {}) {
const opts = _objectSpread({}, originOpts);
const _opts$cwd = opts.cwd,
cwd = _opts$cwd === void 0 ? process.cwd() : _opts$cwd,
moduleNameMapper = opts.moduleNameMapper;
let transformInclude = opts.transformInclude || [];
if (typeof transformInclude === 'string') {
transformInclude = [transformInclude];
}
const jestConfigFile = (0, _path().join)(cwd, 'jest.config.js');
let userJestConfig = {};
if ((0, _fs().existsSync)(jestConfigFile)) {
userJestConfig = require(jestConfigFile); // eslint-disable-line
}
const _userJestConfig = userJestConfig,
userModuleNameMapper = _userJestConfig.moduleNameMapper,
extraSetupFiles = _userJestConfig.extraSetupFiles,
restUserJestConfig = _objectWithoutProperties(_userJestConfig, ["moduleNameMapper", "extraSetupFiles"]);
const config = _objectSpread({
rootDir: process.cwd(),
setupFiles: [require.resolve('./shim.js'), require.resolve('./setupTests.js'), ...(extraSetupFiles || [])],
resolver: require.resolve('jest-pnp-resolver'),
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'],
setupFilesAfterEnv: [require.resolve('./jasmine')],
moduleNameMapper: _objectSpread({
'\\.(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/']
}, process.env.MAX_WORKERS ? {
maxWorkers: Number(process.env.MAX_WORKERS)
} : {}, {}, restUserJestConfig || {});
delete opts.transformInclude; // Convert alias option into real one
Object.keys(_args().options).forEach(name => {
const _ref = _args().options[name] || {},
alias = _ref.alias;
if (alias && opts[alias]) {
opts[name] = opts[alias];
delete opts[alias];
}
});
return new Promise((resolve, reject) => {
_jest().default.runCLI(_objectSpread({
config: JSON.stringify(config)
}, opts), [cwd]).then(result => {
debug(result);
const results = result.results;
if (results.success) {
resolve();
} else {
reject(new Error('Jest failed'));
}
}).catch(e => {
console.log(e);
});
});
}
;