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