diff --git a/bin/mocha b/bin/mocha index cec93a3366..9c7b81678f 100755 --- a/bin/mocha +++ b/bin/mocha @@ -9,7 +9,7 @@ * @private */ -const {deprecate, warn} = require('../lib/utils'); +const {deprecate} = require('../lib/utils'); const {spawn} = require('child_process'); const {loadOptions} = require('../lib/cli/options'); const { @@ -20,7 +20,6 @@ const { const unparse = require('yargs-unparser'); const debug = require('debug')('mocha:cli:mocha'); const {aliases} = require('../lib/cli/run-option-metadata'); -const nodeEnv = require('node-environment-flags'); const mochaPath = require.resolve('./_mocha'); const mochaArgs = {}; @@ -64,51 +63,20 @@ Object.keys(opts).forEach(opt => { // Native debugger handling // see https://nodejs.org/api/debugger.html#debugger_debugger -// look for 'debug' or 'inspect' that would launch this debugger, +// look for 'inspect' or 'debug' that would launch this debugger, // remove it from Mocha's opts and prepend it to Node's opts. -// also coerce depending on Node.js version. // A deprecation warning will be printed by node, if applicable. // (mochaArgs._ are "positional" arguments, not prefixed with - or --) -if (/^(debug|inspect)$/.test(mochaArgs._[0])) { - const command = mochaArgs._.shift(); - disableTimeouts(command); - // don't conflict with inspector - ['debug', 'inspect', 'debug-brk', 'inspect-brk'] - .filter(opt => opt in nodeArgs || opt in mochaArgs) - .forEach(opt => { - warn(`command "${command}" provided; --${opt} ignored`); - delete nodeArgs[opt]; - delete mochaArgs[opt]; - }); - nodeArgs._ = [ - parseInt( - process.version - .slice(1) - .split('.') - .shift(), - 10 - ) >= 8 - ? 'inspect' - : 'debug' - ]; +if (mochaArgs._) { + var i = mochaArgs._.indexOf('inspect'); + i = i === -1 ? mochaArgs._.indexOf('debug') : i; + if (i > -1) { + const [command] = mochaArgs._.splice(i, 1); + disableTimeouts('inspect'); + nodeArgs._ = [command]; + } } -// allow --debug to invoke --inspect on Node.js v8 or newer. -['debug', 'debug-brk'] - .filter(opt => opt in nodeArgs && !nodeEnv.has(opt)) - .forEach(opt => { - const newOpt = opt === 'debug' ? 'inspect' : 'inspect-brk'; - warn( - `"--${opt}" is not available in Node.js ${ - process.version - }; use "--${newOpt}" instead.` - ); - nodeArgs[newOpt] = nodeArgs[opt]; - mochaArgs.timeout = false; - debug(`--${opt} -> ${newOpt}`); - delete nodeArgs[opt]; - }); - // historical if (nodeArgs.gc) { deprecate( diff --git a/docs/index.md b/docs/index.md index a3fa090632..eb8529eaf8 100644 --- a/docs/index.md +++ b/docs/index.md @@ -39,7 +39,7 @@ Mocha is a feature-rich JavaScript test framework running on [Node.js][] and in - [config file support](#-config-path) - [mocha.opts file support](#-opts-path) - clickable suite titles to filter test execution -- [node debugger support](#-debug-inspect-debug-brk-inspect-brk-debug-inspect) +- [node debugger support](#-inspect-inspect-brk-inspect) - [detects multiple calls to `done()`](#detects-multiple-calls-to-done) - [use any assertion library you want](#assertions) - [extensible reporting, bundled with 9+ reporters](#reporters) @@ -983,7 +983,7 @@ Note: A test that executes for _half_ of the "slow" time will be highlighted _in ### `--timeout , -t ` -> _Update in v6.0.0: `--no-timeout` is implied when invoking Mocha using debug flags. It is equivalent to `--timeout 0`. `--timeout 99999999` is no longer needed._ +> _Update in v6.0.0: `--no-timeout` is implied when invoking Mocha using inspect flags. It is equivalent to `--timeout 0`. `--timeout 99999999` is no longer needed._ Specifies the test case timeout, defaulting to two (2) seconds (2000 milliseconds). Tests taking longer than this amount of time will be marked as failed. @@ -1174,15 +1174,15 @@ Use the _inverse_ of the match specified by `--grep` or `fgrep`. Requires either `--grep` or `--fgrep` (but not both). -### `--debug, --inspect, --debug-brk, --inspect-brk, debug, inspect` +### `--inspect, --inspect-brk, inspect` -> _BREAKING CHANGE in v6.0.0; `-d` is no longer an alias for `--debug`._ > _Other updates in v6.0.0:_ > _In versions of Node.js implementing `--inspect` and `--inspect-brk`, `--debug` and `--debug-brk` are respectively aliases for these two options._ > _Likewise, `debug` (not `--debug`) is an alias for `inspect` (not `--inspect`) in Node.js versions where `debug` is deprecated._ +> _BREAKING CHANGE in v7.0.0; `--debug` / `--debug-brk` are removed and `debug` is deprecated._ -Enables Node.js' debugger or inspector. +Enables Node.js' inspector. -Use `--inspect` / `--inspect-brk` / `--debug` / `--debug-brk` to launch the V8 inspector for use with Chrome Dev Tools. +Use `--inspect` / `--inspect-brk` to launch the V8 inspector for use with Chrome Dev Tools. -Use `inspect` / `debug` to launch Node.js' internal debugger. +Use `inspect` to launch Node.js' internal debugger. All of these options are mutually exclusive. diff --git a/lib/cli/node-flags.js b/lib/cli/node-flags.js index feffaa93e2..8d378e1bf2 100644 --- a/lib/cli/node-flags.js +++ b/lib/cli/node-flags.js @@ -14,7 +14,7 @@ const unparse = require('yargs-unparser'); * @see {@link impliesNoTimeouts} * @private */ -const debugFlags = new Set(['debug', 'debug-brk', 'inspect', 'inspect-brk']); +const debugFlags = new Set(['inspect', 'inspect-brk']); /** * Mocha has historical support for various `node` and V8 flags which might not diff --git a/lib/cli/run.js b/lib/cli/run.js index da5ffd7b6a..a6b7952608 100644 --- a/lib/cli/run.js +++ b/lib/cli/run.js @@ -39,7 +39,7 @@ const GROUPS = { CONFIG: 'Configuration' }; -exports.command = ['$0 [spec..]', 'debug [spec..]']; +exports.command = ['$0 [spec..]', 'inspect']; exports.describe = 'Run tests with Mocha'; diff --git a/test/integration/options/debug.spec.js b/test/integration/options/debug.spec.js deleted file mode 100644 index e7518283c4..0000000000 --- a/test/integration/options/debug.spec.js +++ /dev/null @@ -1,130 +0,0 @@ -'use strict'; - -var helpers = require('../helpers'); -var invokeMocha = helpers.invokeMocha; -var DEFAULT_FIXTURE = helpers.DEFAULT_FIXTURE; - -describe('--debug', function() { - describe('Node.js v8+', function() { - before(function() { - if (process.version.substring(0, 2) === 'v6') { - this.skip(); - } - }); - - it('should invoke --inspect', function(done) { - invokeMocha( - ['--debug', DEFAULT_FIXTURE], - function(err, res) { - if (err) { - return done(err); - } - expect(res, 'to contain output', /Debugger listening/i); - done(); - }, - 'pipe' - ); - }); - - it('should invoke --inspect-brk', function(done) { - var proc = invokeMocha( - ['--debug-brk', DEFAULT_FIXTURE], - function(err, res) { - if (err) { - return done(err); - } - expect(res, 'to contain output', /Debugger listening/i); - done(); - }, - 'pipe' - ); - - // debugger must be manually killed - setTimeout(function() { - process.kill(proc.pid, 'SIGINT'); - }, 2000); - }); - - it('should respect custom host/port', function(done) { - invokeMocha( - ['--debug=127.0.0.1:9229', DEFAULT_FIXTURE], - function(err, res) { - if (err) { - return done(err); - } - expect( - res, - 'to contain output', - /Debugger listening on .*127.0.0.1:9229/i - ); - done(); - }, - 'pipe' - ); - }); - - it('should warn about incorrect usage for version', function(done) { - invokeMocha( - ['--debug=127.0.0.1:9229', DEFAULT_FIXTURE], - function(err, res) { - if (err) { - return done(err); - } - expect(res, 'to contain output', /"--debug" is not available/i); - done(); - }, - 'pipe' - ); - }); - }); - - describe('Node.js v6', function() { - // note that v6.3.0 and newer supports --inspect but still supports --debug. - before(function() { - if (process.version.substring(0, 2) !== 'v6') { - this.skip(); - } - }); - - it('should start debugger', function(done) { - var proc = invokeMocha( - ['--debug', DEFAULT_FIXTURE], - function(err, res) { - if (err) { - return done(err); - } - expect(res, 'to contain output', /Debugger listening/i); - done(); - }, - 'pipe' - ); - - // debugger must be manually killed - setTimeout(function() { - process.kill(proc.pid, 'SIGINT'); - }, 2000); - }); - - it('should respect custom host/port', function(done) { - var proc = invokeMocha( - ['--debug=127.0.0.1:9229', DEFAULT_FIXTURE], - function(err, res) { - if (err) { - return done(err); - } - expect( - res, - 'to contain output', - /Debugger listening on .*127.0.0.1:9229/i - ); - done(); - }, - 'pipe' - ); - - setTimeout(function() { - process.kill(proc.pid, 'SIGINT'); - }, 2000); - }); - }); -}); diff --git a/test/node-unit/cli/node-flags.spec.js b/test/node-unit/cli/node-flags.spec.js index 1347f256a9..9871088117 100644 --- a/test/node-unit/cli/node-flags.spec.js +++ b/test/node-unit/cli/node-flags.spec.js @@ -86,10 +86,8 @@ describe('node-flags', function() { }); describe('impliesNoTimeouts()', function() { - it('should return true for debug/inspect flags', function() { - expect(impliesNoTimeouts('debug'), 'to be true'); + it('should return true for inspect flags', function() { expect(impliesNoTimeouts('inspect'), 'to be true'); - expect(impliesNoTimeouts('debug-brk'), 'to be true'); expect(impliesNoTimeouts('inspect-brk'), 'to be true'); }); });