| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 | '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  }}
 |