atool-test
Version:
Unit testing tool based on dora & mocha & webpack
96 lines (70 loc) • 3.03 kB
JavaScript
'use strict';
var _path = require('path');
var _glob = require('glob');
var _glob2 = _interopRequireDefault(_glob);
var _objectAssign = require('object-assign');
var _objectAssign2 = _interopRequireDefault(_objectAssign);
var _getWebpackCommonConfig = require('atool-build/lib/getWebpackCommonConfig');
var _getWebpackCommonConfig2 = _interopRequireDefault(_getWebpackCommonConfig);
var _mergeCustomConfig = require('atool-build/lib/mergeCustomConfig');
var _mergeCustomConfig2 = _interopRequireDefault(_mergeCustomConfig);
var _htmlWebpackPlugin = require('html-webpack-plugin');
var _htmlWebpackPlugin2 = _interopRequireDefault(_htmlWebpackPlugin);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var cwd = process.cwd();
var commonConfig = (0, _getWebpackCommonConfig2.default)({ cwd: cwd });
module.exports = function getTestWebpackCfg(chai, coverage, config) {
var customConfigPath = (0, _path.join)(cwd, config);
var webpackConfig = (0, _objectAssign2.default)({}, (0, _mergeCustomConfig2.default)(commonConfig, customConfigPath), {
devtool: '#inline-source-map'
});
delete webpackConfig.babel.cacheDirectory;
webpackConfig.module.noParse = [/\/sinon\.js/];
for (var i = 0; i < webpackConfig.plugins.length; i++) {
if (webpackConfig.plugins[i].chunkNames === 'common') {
webpackConfig.plugins.splice(i, 1);
break;
}
}
var htmlPluginFiles = webpackConfig.htmlWebpackPlugin && webpackConfig.htmlWebpackPlugin.files || {};
webpackConfig.plugins.push(new _htmlWebpackPlugin2.default({
template: (0, _path.join)(__dirname, './runner.ejs'),
inject: false,
filename: 'runner.html',
files: {
css: htmlPluginFiles.css || [],
js: htmlPluginFiles.js || []
}
}));
webpackConfig.resolve.modulesDirectories.push((0, _path.join)(__dirname, '../node_modules'));
webpackConfig.resolveLoader.modulesDirectories.push((0, _path.join)(__dirname, '../node_modules'));
webpackConfig.output.libraryTarget = 'var';
if (coverage) {
var preLoaders = [{
test: /\.jsx?$/,
exclude: /(__tests__|tests|test|node_modules|bower_components)/,
loader: 'isparta'
}];
if (webpackConfig.module.preLoaders) {
webpackConfig.module.preLoaders.concat(preLoaders);
} else {
webpackConfig.module.preLoaders = preLoaders;
}
}
var testFiles = [(0, _path.join)(__dirname, chai ? './setup_chai.js' : './setup.js')];
// test some test-files
var entryFiles = webpackConfig.atoolTestSpec;
if (entryFiles && entryFiles.length) {
entryFiles.forEach(function (f) {
var files = _glob2.default.sync((0, _path.join)(cwd, f));
testFiles.push.apply(testFiles, files);
});
} else {
var globFiles = _glob2.default.sync((0, _path.join)(cwd, '!(node_modules)/**/*-+(test|spec).+(ts|js|tsx|jsx)'));
testFiles = testFiles.concat(globFiles);
}
webpackConfig.entry = {
test: Array.from(new Set(testFiles))
};
return webpackConfig;
};