diff --git a/lib/console/console.js b/lib/console/console.js index 97821451..772fc5f4 100644 --- a/lib/console/console.js +++ b/lib/console/console.js @@ -54,7 +54,8 @@ getJasmineRequireObj().ConsoleReporter = function() { red: '\x1B[31m', yellow: '\x1B[33m', none: '\x1B[0m' - }; + }, + exceptionList = []; this.jasmineStarted = function() { specCount = 0; @@ -84,9 +85,16 @@ getJasmineRequireObj().ConsoleReporter = function() { printNewline(); var seconds = timer.elapsed() / 1000; print('Finished in ' + seconds + ' ' + plural('second', seconds)); - printNewline(); + exceptionList.forEach(function(error) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', error.stack)); + printNewline(); + }); + onComplete(failureCount === 0); }; @@ -111,6 +119,10 @@ getJasmineRequireObj().ConsoleReporter = function() { } }; + this.afterAllException = function(error) { + exceptionList.push(error); + }; + return this; function printNewline() { diff --git a/spec/console/ConsoleReporterSpec.js b/spec/console/ConsoleReporterSpec.js index 2a0e927b..5e158d1f 100644 --- a/spec/console/ConsoleReporterSpec.js +++ b/spec/console/ConsoleReporterSpec.js @@ -176,9 +176,7 @@ describe("ConsoleReporter", function() { expect(onComplete).toHaveBeenCalled(); }); - describe("with color", function() { - it("reports that the suite has started to the console", function() { var reporter = new j$.ConsoleReporter({ print: out.print, @@ -222,5 +220,21 @@ describe("ConsoleReporter", function() { expect(out.getOutput()).toEqual("\x1B[31mF\x1B[0m"); }); + + it("displays all afterAll exceptions", function() { + var reporter = new j$.ConsoleReporter({ + print: out.print, + showColors: true + }), + error = new Error('After All Exception'), + anotherError = new Error('Some Other Exception'); + + reporter.afterAllException(error); + reporter.afterAllException(anotherError); + reporter.jasmineDone(); + + expect(out.getOutput()).toMatch(/After All Exception/); + expect(out.getOutput()).toMatch(/Some Other Exception/); + }); }); }); diff --git a/spec/node_suite.js b/spec/node_suite.js index e2d3eeae..54f09488 100644 --- a/spec/node_suite.js +++ b/spec/node_suite.js @@ -47,7 +47,15 @@ var jasmineInterface = { jsApiReporter: new jasmine.JsApiReporter({ timer: new jasmine.Timer() - }) + }), + + beforeAll: function(beforeAllFunction) { + return env.beforeAll(beforeAllFunction); + }, + + afterAll: function(afterAllFunction) { + return env.afterAll(afterAllFunction); + } }; extend(global, jasmineInterface); diff --git a/src/console/ConsoleReporter.js b/src/console/ConsoleReporter.js index f2fac6b8..cdd11b0f 100644 --- a/src/console/ConsoleReporter.js +++ b/src/console/ConsoleReporter.js @@ -19,7 +19,8 @@ getJasmineRequireObj().ConsoleReporter = function() { red: '\x1B[31m', yellow: '\x1B[33m', none: '\x1B[0m' - }; + }, + exceptionList = []; this.jasmineStarted = function() { specCount = 0; @@ -49,9 +50,16 @@ getJasmineRequireObj().ConsoleReporter = function() { printNewline(); var seconds = timer.elapsed() / 1000; print('Finished in ' + seconds + ' ' + plural('second', seconds)); - printNewline(); + exceptionList.forEach(function(error) { + printNewline(); + print(colored('red', 'An error was thrown in an afterAll')); + printNewline(); + print(colored('red', error.stack)); + printNewline(); + }); + onComplete(failureCount === 0); }; @@ -76,6 +84,10 @@ getJasmineRequireObj().ConsoleReporter = function() { } }; + this.afterAllException = function(error) { + exceptionList.push(error); + }; + return this; function printNewline() {