diff --git a/lib/runner.js b/lib/runner.js index 7c4435219e..ddf3a30eb1 100644 --- a/lib/runner.js +++ b/lib/runner.js @@ -857,15 +857,10 @@ Runner.prototype.run = function(fn) { filterOnly(rootSuite); } self.started = true; - Runner.immediately(function() { - self.emit('start'); - }); - + self.emit('start'); self.runSuite(rootSuite, function() { debug('finished running'); - Runner.immediately(function() { - self.emit('end'); - }); + self.emit('end'); }); } diff --git a/test/integration/events.spec.js b/test/integration/events.spec.js index dc08a57381..14876f6842 100644 --- a/test/integration/events.spec.js +++ b/test/integration/events.spec.js @@ -56,4 +56,23 @@ describe('event order', function() { ); }); }); + + describe('--retries and --bail test case', function() { + it('should assert --retries event order', function(done) { + runMochaJSON( + 'runner/events-bail-retries.fixture.js', + ['--retries', '1', '--bail'], + function(err, res) { + if (err) { + done(err); + return; + } + expect(res, 'to have failed with error', 'error test A') + .and('to have failed test count', 1) + .and('to have passed test count', 0); + done(); + } + ); + }); + }); }); diff --git a/test/integration/fixtures/runner/events-bail-retries.fixture.js b/test/integration/fixtures/runner/events-bail-retries.fixture.js new file mode 100644 index 0000000000..62c5f58bde --- /dev/null +++ b/test/integration/fixtures/runner/events-bail-retries.fixture.js @@ -0,0 +1,27 @@ +'use strict'; +var Runner = require('../../../../lib/runner.js'); +var assert = require('assert'); + +var emitOrder = [ + 'start', 'suite', 'suite', + 'hook', 'hook end', 'test', 'hook', 'hook end', 'retry', 'hook', 'hook end', + 'test', 'hook', 'hook end', 'fail', 'test end', 'hook', 'hook end', 'hook', 'hook end', + 'suite end', 'suite end', 'end' +]; + +var realEmit = Runner.prototype.emit; +Runner.prototype.emit = function(event, ...args) { + // console.log(`emit: ${event}`); + assert.strictEqual(event, emitOrder.shift()); + return realEmit.call(this, event, ...args); +}; + +describe('suite A', function() { + before('before', function() {}); + beforeEach('beforeEach', function() {}); + it('test A', function() { + throw new Error('error test A'); + }); + afterEach('afterEach', function() {}); + after('after', function() {}); +}); diff --git a/test/integration/fixtures/runner/events-bail.fixture.js b/test/integration/fixtures/runner/events-bail.fixture.js index 3a345f8169..fd7e2c58c7 100644 --- a/test/integration/fixtures/runner/events-bail.fixture.js +++ b/test/integration/fixtures/runner/events-bail.fixture.js @@ -3,14 +3,14 @@ var Runner = require('../../../../lib/runner.js'); var assert = require('assert'); var emitOrder = [ - 'suite'/* incorrect order*/, 'start', 'suite', + 'start', 'suite', 'suite', 'hook', 'hook end', 'test', 'hook', 'hook end', 'fail', 'test end', 'hook', 'hook end', 'hook', 'hook end', 'suite end', 'suite end', 'end' ]; var realEmit = Runner.prototype.emit; Runner.prototype.emit = function(event, ...args) { - // console.log(`emit: ${event}`); + // console.log(`emit: ${event}`); assert.strictEqual(event, emitOrder.shift()); return realEmit.call(this, event, ...args); }; diff --git a/test/integration/fixtures/runner/events-basic.fixture.js b/test/integration/fixtures/runner/events-basic.fixture.js index 81c55a8bb4..4360fa7b69 100644 --- a/test/integration/fixtures/runner/events-basic.fixture.js +++ b/test/integration/fixtures/runner/events-basic.fixture.js @@ -3,7 +3,7 @@ var Runner = require('../../../../lib/runner.js'); var assert = require('assert'); var emitOrder = [ - 'suite'/* incorrect order*/, 'start', 'suite', + 'start', 'suite', 'suite', 'hook', 'hook end', 'test', 'hook', 'hook end', 'pass', 'test end', 'hook', 'hook end', 'suite', 'test', 'hook', 'hook end', 'pass', 'test end', 'hook', 'hook end', 'suite end', 'hook', 'hook end', 'suite end', 'suite end', 'end' @@ -11,7 +11,6 @@ var emitOrder = [ var realEmit = Runner.prototype.emit; Runner.prototype.emit = function(event, ...args) { - // console.log(`emit: ${event}`); assert.strictEqual(event, emitOrder.shift()); return realEmit.call(this, event, ...args); }; diff --git a/test/integration/fixtures/runner/events-retries.fixture.js b/test/integration/fixtures/runner/events-retries.fixture.js index a4547c8fa8..62c5f58bde 100644 --- a/test/integration/fixtures/runner/events-retries.fixture.js +++ b/test/integration/fixtures/runner/events-retries.fixture.js @@ -3,7 +3,7 @@ var Runner = require('../../../../lib/runner.js'); var assert = require('assert'); var emitOrder = [ - 'suite'/* incorrect order*/, 'start', 'suite', + 'start', 'suite', 'suite', 'hook', 'hook end', 'test', 'hook', 'hook end', 'retry', 'hook', 'hook end', 'test', 'hook', 'hook end', 'fail', 'test end', 'hook', 'hook end', 'hook', 'hook end', 'suite end', 'suite end', 'end' @@ -11,7 +11,7 @@ var emitOrder = [ var realEmit = Runner.prototype.emit; Runner.prototype.emit = function(event, ...args) { - // console.log(`emit: ${event}`); + // console.log(`emit: ${event}`); assert.strictEqual(event, emitOrder.shift()); return realEmit.call(this, event, ...args); };