From 8c214096957e714c638c31b9bb3e53b4dc81d1a7 Mon Sep 17 00:00:00 2001 From: Mark Lee Date: Wed, 27 Nov 2019 01:11:17 -0800 Subject: [PATCH] fix(cli): warn on unknown commands Emit a warning and exit with status code 1. Based on https://github.com/tj/commander.js/issues/1088#issuecomment-549018472 --- packages/api/cli/src/electron-forge.ts | 8 +++++++- packages/api/cli/test/cli_spec.ts | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 packages/api/cli/test/cli_spec.ts diff --git a/packages/api/cli/src/electron-forge.ts b/packages/api/cli/src/electron-forge.ts index efb804114a..d78c3eb8f0 100755 --- a/packages/api/cli/src/electron-forge.ts +++ b/packages/api/cli/src/electron-forge.ts @@ -34,7 +34,13 @@ program .command('make', 'Generate distributables for the current Electron application') .command('start', 'Start the current Electron application') .command('publish', 'Publish the current Electron application to GitHub') - .command('install', 'Install an Electron application from GitHub'); + .command('install', 'Install an Electron application from GitHub') + .on('command:*', () => { + console.error(); + console.error(`Unknown command "${program.args.join(' ')}".`.red); + console.error('See --help for a list of available commands.'); + process.exit(1); + }); (async () => { let goodSystem; diff --git a/packages/api/cli/test/cli_spec.ts b/packages/api/cli/test/cli_spec.ts new file mode 100644 index 0000000000..b887ebedb8 --- /dev/null +++ b/packages/api/cli/test/cli_spec.ts @@ -0,0 +1,14 @@ +import chai, { expect } from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import path from 'path'; +import spawnPromise from 'cross-spawn-promise'; + +chai.use(chaiAsPromised); + +describe('cli', () => { + it('should fail on unknown subcommands', async () => { + const error = await expect(spawnPromise(path.resolve(__dirname, '../../../../node_modules/.bin/ts-node'), [path.resolve(__dirname, '../src/electron-forge.ts'), 'nonexistent'])).to.eventually.be.rejected; + expect(error.exitStatus).to.equal(1); + expect(error.stderr.toString()).to.match(/Unknown command "nonexistent"/); + }); +});