diff --git a/packages/api/cli/package.json b/packages/api/cli/package.json index 3c5879f68a..b1859c6fcf 100644 --- a/packages/api/cli/package.json +++ b/packages/api/cli/package.json @@ -12,6 +12,8 @@ }, "devDependencies": { "chai": "4.2.0", + "chai-as-promised": "^7.0.0", + "cross-spawn-promise": "^0.10.1", "mocha": "^6.2.2" }, "dependencies": { 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..6633257431 --- /dev/null +++ b/packages/api/cli/test/cli_spec.ts @@ -0,0 +1,19 @@ +import chai, { expect } from 'chai'; +import chaiAsPromised from 'chai-as-promised'; +import path from 'path'; +import spawnPromise from 'cross-spawn-promise'; + +chai.use(chaiAsPromised); + +function tsNodePath() { + const tsNode = path.resolve(__dirname, '../../../../node_modules/.bin/ts-node'); + return process.platform === 'win32' ? `${tsNode}.cmd` : tsNode; +} + +describe('cli', () => { + it('should fail on unknown subcommands', async () => { + const error = await expect(spawnPromise(tsNodePath(), [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"/); + }); +});