From c2a84e6cbe7a7c321675054550b68a0d6e98755d Mon Sep 17 00:00:00 2001 From: charlierudolph Date: Wed, 1 Feb 2017 09:15:22 -0800 Subject: [PATCH] update --- bin/_mocha | 11 +++++-- lib/mocha.js | 18 ++++++++--- lib/runner.js | 7 +++-- .../{production => forbid-only}/only.js | 2 +- .../{production => forbid-only}/passed.js | 2 +- .../fixtures/options/forbid-pending/passed.js | 5 ++++ .../{production => forbid-pending}/pending.js | 2 +- .../skipped.js => forbid-pending/skip.js} | 2 +- .../fixtures/options/production/failed.js | 5 ---- test/integration/options.spec.js | 30 +++++++++++-------- 10 files changed, 53 insertions(+), 31 deletions(-) rename test/integration/fixtures/options/{production => forbid-only}/only.js (62%) rename test/integration/fixtures/options/{production => forbid-only}/passed.js (64%) create mode 100644 test/integration/fixtures/options/forbid-pending/passed.js rename test/integration/fixtures/options/{production => forbid-pending}/pending.js (55%) rename test/integration/fixtures/options/{production/skipped.js => forbid-pending/skip.js} (61%) delete mode 100644 test/integration/fixtures/options/production/failed.js diff --git a/bin/_mocha b/bin/_mocha index 6c5e82d53f..2568aada83 100755 --- a/bin/_mocha +++ b/bin/_mocha @@ -108,7 +108,8 @@ program .option('--use_strict', 'enforce strict mode') .option('--watch-extensions ,...', 'additional extensions to monitor with --watch', list, []) .option('--delay', 'wait for async suite definition') - .option('--production', 'causes only, pending, and skipped tests to fail the suite'); + .option('--forbid-only', 'causes test marked with only to fail the suite') + .option('--forbid-pending', 'causes pending tests and test marked with skip to fail the suite'); program._name = 'mocha'; @@ -324,9 +325,13 @@ if (program.retries) { mocha.suite.retries(program.retries); } -// --production +// --forbid-only -if (program.production) mocha.productionMode(); +if (program.forbidOnly) mocha.forbidOnly(); + +// --forbid-pending + +if (program.forbidPending) mocha.forbidPending(); // custom compiler support diff --git a/lib/mocha.js b/lib/mocha.js index c37f3c5dc8..bfc0238d46 100644 --- a/lib/mocha.js +++ b/lib/mocha.js @@ -484,11 +484,20 @@ Mocha.prototype.delay = function delay () { }; /** - * Pending tests and test marked only or skip fail the suite + * Tests marked only fail the suite * @returns {Mocha} */ -Mocha.prototype.productionMode = function () { - this.options.productionMode = true; +Mocha.prototype.forbidOnly = function () { + this.options.forbidOnly = true; + return this; +}; + +/** + * Pending tests and tests marked skip fail the suite + * @returns {Mocha} + */ +Mocha.prototype.forbidPending = function () { + this.options.forbidPending = true; return this; }; @@ -513,7 +522,8 @@ Mocha.prototype.run = function (fn) { runner.hasOnly = options.hasOnly; runner.asyncOnly = options.asyncOnly; runner.allowUncaught = options.allowUncaught; - runner.productionMode = options.productionMode; + runner.forbidOnly = options.forbidOnly; + runner.forbidPending = options.forbidPending; if (options.grep) { runner.grep(options.grep, options.invert); } diff --git a/lib/runner.js b/lib/runner.js index 47c2e2b2e3..366b41081a 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -822,13 +822,14 @@ Runner.prototype.run = function (fn) { // callback this.on('end', function () { var failures = self.failures; - if (self.productionMode) { + if (self.forbidOnly) { if (self.hasOnly) { failures += self.stats.tests; - } else { - failures += self.stats.pending; } } + if (self.forbidPending) { + failures += self.stats.pending; + } debug('end'); process.removeListener('uncaughtException', uncaught); fn(failures); diff --git a/test/integration/fixtures/options/production/only.js b/test/integration/fixtures/options/forbid-only/only.js similarity index 62% rename from test/integration/fixtures/options/production/only.js rename to test/integration/fixtures/options/forbid-only/only.js index cece90bb33..59892a4c8f 100644 --- a/test/integration/fixtures/options/production/only.js +++ b/test/integration/fixtures/options/forbid-only/only.js @@ -1,4 +1,4 @@ -describe('production mode - only', function () { +describe('forbid only - test marked with only', function () { it('test1', function () {}); it.only('test2', function () {}); it('test3', function () {}); diff --git a/test/integration/fixtures/options/production/passed.js b/test/integration/fixtures/options/forbid-only/passed.js similarity index 64% rename from test/integration/fixtures/options/production/passed.js rename to test/integration/fixtures/options/forbid-only/passed.js index 3024da6610..454f4bc845 100644 --- a/test/integration/fixtures/options/production/passed.js +++ b/test/integration/fixtures/options/forbid-only/passed.js @@ -1,4 +1,4 @@ -describe('production mode - passed', function () { +describe('forbid only - all test pass', function () { it('test1', function () {}); it('test2', function () {}); it('test3', function () {}); diff --git a/test/integration/fixtures/options/forbid-pending/passed.js b/test/integration/fixtures/options/forbid-pending/passed.js new file mode 100644 index 0000000000..ecbbb0339f --- /dev/null +++ b/test/integration/fixtures/options/forbid-pending/passed.js @@ -0,0 +1,5 @@ +describe('forbid pending - all test pass', function () { + it('test1', function () {}); + it('test2', function () {}); + it('test3', function () {}); +}); diff --git a/test/integration/fixtures/options/production/pending.js b/test/integration/fixtures/options/forbid-pending/pending.js similarity index 55% rename from test/integration/fixtures/options/production/pending.js rename to test/integration/fixtures/options/forbid-pending/pending.js index 41989cfc8f..6762e6f5cc 100644 --- a/test/integration/fixtures/options/production/pending.js +++ b/test/integration/fixtures/options/forbid-pending/pending.js @@ -1,4 +1,4 @@ -describe('production mode - pending', function () { +describe('forbid pending - test without function', function () { it('test1', function () {}); it('test2'); it('test3', function () {}); diff --git a/test/integration/fixtures/options/production/skipped.js b/test/integration/fixtures/options/forbid-pending/skip.js similarity index 61% rename from test/integration/fixtures/options/production/skipped.js rename to test/integration/fixtures/options/forbid-pending/skip.js index aafc510eaf..d428239222 100644 --- a/test/integration/fixtures/options/production/skipped.js +++ b/test/integration/fixtures/options/forbid-pending/skip.js @@ -1,4 +1,4 @@ -describe('production mode - skipped', function () { +describe('forbid pending - test marked with skip', function () { it('test1', function () {}); it.skip('test2', function () {}); it('test3', function () {}); diff --git a/test/integration/fixtures/options/production/failed.js b/test/integration/fixtures/options/production/failed.js deleted file mode 100644 index d354d1e562..0000000000 --- a/test/integration/fixtures/options/production/failed.js +++ /dev/null @@ -1,5 +0,0 @@ -describe('production mode - failed', function () { - it('test1', function () {}); - it('test2', function () { throw new Error('fail'); }); - it('test3', function () {}); -}); diff --git a/test/integration/options.spec.js b/test/integration/options.spec.js index ae43815135..4499972f96 100644 --- a/test/integration/options.spec.js +++ b/test/integration/options.spec.js @@ -181,45 +181,51 @@ describe('options', function () { }); }); - describe('--production', function () { + describe.only('--forbid-only', function () { before(function () { - args = ['--production']; + args = ['--forbid-only']; }); it('succeeds if there are only passed tests', function (done) { - run('options/production/passed.js', args, function (err, res) { + run('options/forbid-only/passed.js', args, function (err, res) { assert(!err); assert.equal(res.code, 0); done(); }); }); - it('fails if there are failed tests', function (done) { - run('options/production/failed.js', args, function (err, res) { + it('fails if there are tests marked only', function (done) { + run('options/forbid-only/only.js', args, function (err, res) { assert(!err); assert.equal(res.code, 1); done(); }); }); + }); + + describe.only('--forbid-pending', function () { + before(function () { + args = ['--forbid-pending']; + }); - it('fails if there are skipped tests', function (done) { - run('options/production/skipped.js', args, function (err, res) { + it('succeeds if there are only passed tests', function (done) { + run('options/forbid-pending/passed.js', args, function (err, res) { assert(!err); - assert.equal(res.code, 1); + assert.equal(res.code, 0); done(); }); }); - it('fails if there are pending tests', function (done) { - run('options/production/pending.js', args, function (err, res) { + it('fails if there are tests marked skip', function (done) { + run('options/forbid-pending/skip.js', args, function (err, res) { assert(!err); assert.equal(res.code, 1); done(); }); }); - it('fails if there are tests marked only', function (done) { - run('options/production/only.js', args, function (err, res) { + it('fails if there are pending tests', function (done) { + run('options/forbid-pending/pending.js', args, function (err, res) { assert(!err); assert.equal(res.code, 1); done();