mirror of
https://github.com/elastic/kibana.git
synced 2025-04-24 17:59:23 -04:00
Separate the task runner and the command line parser (elastic/kibana-plugin-helpers#25)
* remove conditionl require in runner add tasks module to load all tasks, throw if task does not exist * change task signatures and action handlers - tasks get plugin, run, and an options object - action handler controls what goes into each task - taskRunner wrapper moves the command object to the first argument * change test command signature allow files to be passed in, and pass all options to test:server and test:browser * simplify the task runner * fix typo in unknownOptions * expose the task runner as the module's main this way tasks can be run programatically without going through a cli parser * add tests for task runner * remove file passing for testAll * add serverTestPaths to the plugin config useful for overriding the value via a config file * [config] plugin.serverTestPaths -> plugin.serverTestPatterns Original commit: elastic/kibana-plugin-helpers@82af4df64e
This commit is contained in:
parent
cfb0346b32
commit
0d621e778a
12 changed files with 97 additions and 29 deletions
|
@ -4,7 +4,7 @@ module.exports = function enableCollectingUnknownOptions(command) {
|
|||
command.allowUnknownOption();
|
||||
command.parseOptions = function (argv) {
|
||||
let opts = origParse.call(this, argv);
|
||||
this.unkownOptions = opts.unknown;
|
||||
this.unknownOptions = opts.unknown;
|
||||
return opts;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -23,6 +23,7 @@ module.exports = function (root) {
|
|||
return Object.assign({
|
||||
root: root,
|
||||
kibanaRoot: resolve(root, '../kibana'),
|
||||
serverTestPatterns: ['server/**/__tests__/**/*.js'],
|
||||
id: pkg.name,
|
||||
pkg: pkg,
|
||||
version: pkg.version,
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
var pluginConfig = require('./plugin_config');
|
||||
var tasks = require('./tasks');
|
||||
|
||||
module.exports = function run(name) {
|
||||
var action = require('../tasks/' + name);
|
||||
return function () {
|
||||
// call the action function with the plugin, then all
|
||||
// renaining arguments from commander
|
||||
var plugin = pluginConfig();
|
||||
var args = [].slice.apply(arguments);
|
||||
module.exports = function run(name, options) {
|
||||
var action = tasks[name];
|
||||
if (!action) throw new Error('Invalid task: "' + name + '"');
|
||||
|
||||
action.apply(null, [plugin, run].concat(args));
|
||||
};
|
||||
var plugin = pluginConfig();
|
||||
action(plugin, run, options);
|
||||
};
|
||||
|
|
30
packages/kbn-plugin-helpers/lib/run.spec.js
Normal file
30
packages/kbn-plugin-helpers/lib/run.spec.js
Normal file
|
@ -0,0 +1,30 @@
|
|||
/*eslint-env jest*/
|
||||
|
||||
const testTask = jest.fn();
|
||||
const plugin = { id: 'testPlugin' };
|
||||
|
||||
jest.mock('./plugin_config', () => () => plugin);
|
||||
jest.mock('./tasks', () => {
|
||||
return { testTask };
|
||||
});
|
||||
const run = require('./run');
|
||||
|
||||
describe('task runner', () => {
|
||||
beforeEach(() => jest.resetAllMocks());
|
||||
|
||||
it('throw given an invalid task', function () {
|
||||
const invalidTaskName = 'thisisnotavalidtasknameandneverwillbe';
|
||||
const runner = () => run(invalidTaskName);
|
||||
|
||||
expect(runner).toThrow(/invalid task/i);
|
||||
});
|
||||
|
||||
it('runs specified task with plugin and runner', function () {
|
||||
run('testTask');
|
||||
|
||||
const args = testTask.mock.calls[0];
|
||||
expect(testTask.mock.calls).toHaveLength(1);
|
||||
expect(args[0]).toBe(plugin);
|
||||
expect(args[1]).toBe(run);
|
||||
});
|
||||
});
|
13
packages/kbn-plugin-helpers/lib/tasks.js
Normal file
13
packages/kbn-plugin-helpers/lib/tasks.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
var buildTask = require('../tasks/build');
|
||||
var startTask = require('../tasks/start');
|
||||
var testAllTask = require('../tasks/test/all');
|
||||
var testBrowserTask = require('../tasks/test/browser');
|
||||
var testServerTask = require('../tasks/test/server');
|
||||
|
||||
module.exports = {
|
||||
build: buildTask,
|
||||
start: startTask,
|
||||
testAll: testAllTask,
|
||||
testBrowser: testBrowserTask,
|
||||
testServer: testServerTask,
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue