From 8f15365fff336467e1fb8498cebf3b5fdacd2762 Mon Sep 17 00:00:00 2001 From: Christopher Hiller Date: Thu, 24 Jan 2019 14:45:53 -0800 Subject: [PATCH] ensure invalid arguments are not ignored when using bin/mocha; closes #3687 Signed-off-by: Christopher Hiller --- lib/cli/options.js | 10 ++++++++-- test/integration/invalid-arguments.spec.js | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 test/integration/invalid-arguments.spec.js diff --git a/lib/cli/options.js b/lib/cli/options.js index 00ce35b73e..854120418f 100644 --- a/lib/cli/options.js +++ b/lib/cli/options.js @@ -17,6 +17,7 @@ const {loadConfig, findConfig} = require('./config'); const findup = require('findup-sync'); const {deprecate} = require('../utils'); const debug = require('debug')('mocha:cli:options'); +const {createMissingArgumentError} = require('../errors'); /** * The `yargs-parser` namespace @@ -73,8 +74,8 @@ const nargOpts = types.array * @private * @ignore */ -const parse = (args = [], ...configObjects) => - yargsParser( +const parse = (args = [], ...configObjects) => { + const result = yargsParser.detailed( args, Object.assign( { @@ -87,6 +88,11 @@ const parse = (args = [], ...configObjects) => types ) ); + if (result.error) { + throw createMissingArgumentError(result.error.message); + } + return result.argv; +}; /** * - Replaces comments with empty strings diff --git a/test/integration/invalid-arguments.spec.js b/test/integration/invalid-arguments.spec.js new file mode 100644 index 0000000000..6c147bdb48 --- /dev/null +++ b/test/integration/invalid-arguments.spec.js @@ -0,0 +1,20 @@ +'use strict'; + +var invokeMocha = require('./helpers').invokeMocha; + +describe('invalid arguments', function() { + it('should exit with failure if arguments are invalid', function(done) { + invokeMocha( + ['--ui'], + function(err, result) { + if (err) { + return done(err); + } + expect(result, 'to have failed'); + expect(result.output, 'to match', /not enough arguments/i); + done(); + }, + {stdio: 'pipe'} + ); + }); +});