'use strict';
|
|
const path = require('path');
|
const mm = require('mm');
|
const debug = require('debug')('mm');
|
const utils = require('egg-utils');
|
|
/**
|
* format the options
|
* @param {Objct} options - options
|
* @return {Object} options
|
*/
|
module.exports = function formatOptions(options) {
|
const defaults = {
|
baseDir: process.cwd(),
|
cache: true,
|
coverage: true,
|
clean: true,
|
};
|
options = Object.assign({}, defaults, options);
|
|
// relative path to test/fixtures
|
// ```js
|
// formatOptions({ baseDir: 'app' }); // baseDir => $PWD/test/fixtures/app
|
// ```
|
if (!path.isAbsolute(options.baseDir)) {
|
options.baseDir = path.join(process.cwd(), 'test/fixtures', options.baseDir);
|
}
|
|
let framework = options.framework || options.customEgg;
|
// test for framework
|
if (framework === true) {
|
framework = process.cwd();
|
// diable plugin test when framwork test
|
options.plugin = false;
|
} else {
|
// it will throw when framework is not found
|
framework = utils.getFrameworkPath({ framework, baseDir: options.baseDir });
|
}
|
options.customEgg = options.framework = framework;
|
|
const plugins = options.plugins = options.plugins || {};
|
|
// add self as a plugin
|
plugins['egg-mock'] = {
|
enable: true,
|
path: path.join(__dirname, '..'),
|
};
|
|
// test for plugin
|
if (options.plugin !== false) {
|
// add self to plugin list
|
const pkgPath = path.join(process.cwd(), 'package.json');
|
const pluginName = getPluginName(pkgPath);
|
if (options.plugin && !pluginName) {
|
throw new Error(`should set eggPlugin in ${pkgPath}`);
|
}
|
if (pluginName) {
|
plugins[pluginName] = {
|
enable: true,
|
path: process.cwd(),
|
};
|
}
|
}
|
|
// mock HOME as baseDir, but ignore if it has been mocked
|
const env = process.env.EGG_SERVER_ENV;
|
if (!mm.isMocked(process.env, 'HOME') &&
|
(env === 'default' || env === 'test' || env === 'prod')) {
|
mm(process.env, 'HOME', options.baseDir);
|
}
|
|
// disable cache after call mm.env(),
|
// otherwise it will use cache and won't load again.
|
if (process.env.EGG_MOCK_SERVER_ENV) {
|
options.cache = false;
|
}
|
|
debug('format options: %j', options);
|
return options;
|
};
|
|
function getPluginName(pkgPath) {
|
try {
|
const pkg = require(pkgPath);
|
if (pkg.eggPlugin && pkg.eggPlugin.name) {
|
return pkg.eggPlugin.name;
|
}
|
} catch (_) {
|
// ignore
|
}
|
}
|