From 8b1138a07c6d95f45b247ddb526140a81497a1d4 Mon Sep 17 00:00:00 2001 From: juergba Date: Mon, 4 Nov 2019 10:53:20 +0100 Subject: [PATCH] additional tests --- .../allow-uncaught/propagate.fixture.js | 12 ++++++++++ .../fixtures/uncaught-pending.fixture.js | 15 ++++++++++++ .../integration/options/allowUncaught.spec.js | 21 +++++++++++++++++ test/integration/uncaught.spec.js | 23 +++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 test/integration/fixtures/options/allow-uncaught/propagate.fixture.js create mode 100644 test/integration/fixtures/uncaught-pending.fixture.js diff --git a/test/integration/fixtures/options/allow-uncaught/propagate.fixture.js b/test/integration/fixtures/options/allow-uncaught/propagate.fixture.js new file mode 100644 index 0000000000..86d926ed21 --- /dev/null +++ b/test/integration/fixtures/options/allow-uncaught/propagate.fixture.js @@ -0,0 +1,12 @@ +'use strict'; + +describe('Uncaught exception - throw and exit', () => { + it('test1', () => { + setTimeout(() => { + throw new Error('Uncaught error after test1'); + }, 1); + }); + it('test2', function () { }); + it('test3', function () { }); + it('test4', function () { }); +}); diff --git a/test/integration/fixtures/uncaught-pending.fixture.js b/test/integration/fixtures/uncaught-pending.fixture.js new file mode 100644 index 0000000000..593e0da251 --- /dev/null +++ b/test/integration/fixtures/uncaught-pending.fixture.js @@ -0,0 +1,15 @@ +'use strict'; + +describe('Uncaught exception within pending test', () => { + it('test1', function () { }); + + it('test2', function () { + process.nextTick(function () { + throw new Error('I am uncaught!'); + }); + this.skip(); + }); + + it('test3 - should run', function () { }); + it('test4 - should run', function () { }); +}); diff --git a/test/integration/options/allowUncaught.spec.js b/test/integration/options/allowUncaught.spec.js index a3d8739ffe..181aba1446 100644 --- a/test/integration/options/allowUncaught.spec.js +++ b/test/integration/options/allowUncaught.spec.js @@ -2,11 +2,32 @@ var path = require('path').posix; var helpers = require('../helpers'); +var runMocha = helpers.runMocha; var runMochaJSON = helpers.runMochaJSON; describe('--allow-uncaught', function() { var args = ['--allow-uncaught']; + it('should throw an uncaught error and exit process', function(done) { + var fixture = path.join('options', 'allow-uncaught', 'propagate'); + runMocha( + fixture, + args, + function(err, res) { + if (err) { + return done(err); + } + + expect(res.code, 'to be greater than', 0); + expect(res.output, 'to contain', 'Error: Uncaught error after test1'); + expect(res.passing, 'to be', 0); + expect(res.failing, 'to be', 0); + done(); + }, + {stdio: 'pipe'} + ); + }); + it('should run with conditional `this.skip()`', function(done) { var fixture = path.join('options', 'allow-uncaught', 'this-skip-it'); runMochaJSON(fixture, args, function(err, res) { diff --git a/test/integration/uncaught.spec.js b/test/integration/uncaught.spec.js index a65c4b5097..3b7e684925 100644 --- a/test/integration/uncaught.spec.js +++ b/test/integration/uncaught.spec.js @@ -63,4 +63,27 @@ describe('uncaught exceptions', function() { done(); }); }); + + it('handles uncaught exceptions within pending tests', function(done) { + run('uncaught-pending.fixture.js', args, function(err, res) { + if (err) { + return done(err); + } + + expect(res, 'to have failed') + .and('to have passed test count', 3) + .and('to have pending test count', 1) + .and('to have failed test count', 1) + .and( + 'to have passed test', + 'test1', + 'test3 - should run', + 'test4 - should run' + ) + .and('to have pending test order', 'test2') + .and('to have failed test', 'test2'); + + done(); + }); + }); });