Skip to content

Commit 3f7b987

Browse files
juergbaboneskull
authored andcommitted
uncaughtException: report more than one exception per test (#4033)
1 parent ee82d38 commit 3f7b987

File tree

2 files changed

+33
-2
lines changed

2 files changed

+33
-2
lines changed

Diff for: lib/reporters/base.js

+17-2
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ var generateDiff = (exports.generateDiff = function(actual, expected) {
197197
* Error property
198198
*/
199199
exports.list = function(failures) {
200+
var multipleErr, multipleTest;
200201
Base.consoleLog();
201202
failures.forEach(function(test, i) {
202203
// format
@@ -207,7 +208,16 @@ exports.list = function(failures) {
207208

208209
// msg
209210
var msg;
210-
var err = test.err;
211+
var err;
212+
if (test.err && test.err.multiple) {
213+
if (multipleTest !== test) {
214+
multipleTest = test;
215+
multipleErr = [test.err].concat(test.err.multiple);
216+
}
217+
err = multipleErr.shift();
218+
} else {
219+
err = test.err;
220+
}
211221
var message;
212222
if (err.message && typeof err.message.toString === 'function') {
213223
message = err.message + '';
@@ -298,7 +308,12 @@ function Base(runner, options) {
298308
if (showDiff(err)) {
299309
stringifyDiffObjs(err);
300310
}
301-
test.err = err;
311+
// more than one error per test
312+
if (test.err && err instanceof Error) {
313+
test.err.multiple = (test.err.multiple || []).concat(err);
314+
} else {
315+
test.err = err;
316+
}
302317
failures.push(test);
303318
});
304319
}

Diff for: test/reporters/base.spec.js

+16
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,22 @@ describe('Base reporter', function() {
417417
expect(errOut, 'to be', '1) test title:\n Error\n foo\n bar');
418418
});
419419

420+
it('should list multiple Errors per test', function() {
421+
var err = new Error('First Error');
422+
err.multiple = [new Error('Second Error - same test')];
423+
var test = makeTest(err);
424+
425+
list([test, test]);
426+
427+
var errOut = stdout.join('\n').trim();
428+
expect(
429+
errOut,
430+
'to contain',
431+
'Error: First Error',
432+
'Error: Second Error - same test'
433+
);
434+
});
435+
420436
describe('when reporter output immune to user test changes', function() {
421437
var sandbox;
422438
var baseConsoleLog;

0 commit comments

Comments
 (0)