diff --git a/test/integration/events.spec.js b/test/integration/events.spec.js new file mode 100644 index 0000000000..dc08a57381 --- /dev/null +++ b/test/integration/events.spec.js @@ -0,0 +1,59 @@ +'use strict'; + +var helpers = require('./helpers'); +var runMochaJSON = helpers.runMochaJSON; + +describe('event order', function() { + describe('trivial test case', function() { + it('should assert trivial event order', function(done) { + runMochaJSON('runner/events-basic.fixture.js', [], function(err, res) { + if (err) { + done(err); + return; + } + expect(res, 'to have passed') + .and('to have passed test count', 2) + .and('to have passed test order', 'test A', 'test B') + .and('to have failed test count', 0); + done(); + }); + }); + }); + + describe('--bail test case', function() { + it('should assert --bail event order', function(done) { + runMochaJSON('runner/events-bail.fixture.js', ['--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(); + }); + }); + }); + + describe('--retries test case', function() { + it('should assert --retries event order', function(done) { + runMochaJSON( + 'runner/events-retries.fixture.js', + ['--retries', '1'], + 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.fixture.js b/test/integration/fixtures/runner/events-bail.fixture.js new file mode 100644 index 0000000000..3a345f8169 --- /dev/null +++ b/test/integration/fixtures/runner/events-bail.fixture.js @@ -0,0 +1,29 @@ +'use strict'; +var Runner = require('../../../../lib/runner.js'); +var assert = require('assert'); + +var emitOrder = [ + 'suite'/* incorrect order*/, 'start', '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}`); + 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'); + }); + describe('suite B', function() { + it('test B', function() {}); + }); + afterEach('afterEach', function() {}); + after('after', function() {}); +}); diff --git a/test/integration/fixtures/runner/events-basic.fixture.js b/test/integration/fixtures/runner/events-basic.fixture.js new file mode 100644 index 0000000000..81c55a8bb4 --- /dev/null +++ b/test/integration/fixtures/runner/events-basic.fixture.js @@ -0,0 +1,28 @@ +'use strict'; +var Runner = require('../../../../lib/runner.js'); +var assert = require('assert'); + +var emitOrder = [ + 'suite'/* incorrect order*/, 'start', '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' +]; + +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() {}); + describe('suite B', function() { + it('test B', function() {}); + }); + afterEach('afterEach', function() {}); + after('after', function() {}); +}); diff --git a/test/integration/fixtures/runner/events-retries.fixture.js b/test/integration/fixtures/runner/events-retries.fixture.js new file mode 100644 index 0000000000..a4547c8fa8 --- /dev/null +++ b/test/integration/fixtures/runner/events-retries.fixture.js @@ -0,0 +1,27 @@ +'use strict'; +var Runner = require('../../../../lib/runner.js'); +var assert = require('assert'); + +var emitOrder = [ + 'suite'/* incorrect order*/, 'start', '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() {}); +});