From deb3cb4daef0054457bd9fb8995829fff0e8f1e4 Mon Sep 17 00:00:00 2001 From: David Souther Date: Tue, 23 Dec 2014 11:16:39 -0500 Subject: [PATCH] feat(ngMock/$exceptionHandler): log errors when rethrowing Now the `rethrow` mode will also record a log of the error in the same way as the `log` mode. Closes #10540 Closes #10564 --- src/ngMock/angular-mocks.js | 22 +++++++++++----------- test/ngMock/angular-mocksSpec.js | 13 +++++++++++++ 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/ngMock/angular-mocks.js b/src/ngMock/angular-mocks.js index 450328a7..b54c7f9b 100644 --- a/src/ngMock/angular-mocks.js +++ b/src/ngMock/angular-mocks.js @@ -243,31 +243,31 @@ angular.mock.$ExceptionHandlerProvider = function() { * * @param {string} mode Mode of operation, defaults to `rethrow`. * - * - `rethrow`: If any errors are passed to the handler in tests, it typically means that there - * is a bug in the application or test, so this mock will make these tests fail. * - `log`: Sometimes it is desirable to test that an error is thrown, for this case the `log` * mode stores an array of errors in `$exceptionHandler.errors`, to allow later * assertion of them. See {@link ngMock.$log#assertEmpty assertEmpty()} and * {@link ngMock.$log#reset reset()} + * - `rethrow`: If any errors are passed to the handler in tests, it typically means that there + * is a bug in the application or test, so this mock will make these tests fail. + * For any implementations that expect exceptions to be thrown, the `rethrow` mode + * will also maintain a log of thrown errors. */ this.mode = function(mode) { - switch (mode) { - case 'rethrow': - handler = function(e) { - throw e; - }; - break; - case 'log': - var errors = []; + switch (mode) { + case 'log': + case 'rethrow': + var errors = []; handler = function(e) { if (arguments.length == 1) { errors.push(e); } else { errors.push([].slice.call(arguments, 0)); } + if (mode === "rethrow") { + throw e; + } }; - handler.errors = errors; break; default: diff --git a/test/ngMock/angular-mocksSpec.js b/test/ngMock/angular-mocksSpec.js index 4b09cbd8..54ea6f34 100644 --- a/test/ngMock/angular-mocksSpec.js +++ b/test/ngMock/angular-mocksSpec.js @@ -605,6 +605,19 @@ describe('ngMock', function() { }); }); + it('should log and rethrow exceptions', function() { + module(function($exceptionHandlerProvider) { + $exceptionHandlerProvider.mode('rethrow'); + }); + inject(function($exceptionHandler) { + expect(function() { $exceptionHandler('MyError'); }).toThrow('MyError'); + expect($exceptionHandler.errors).toEqual(['MyError']); + + expect(function() { $exceptionHandler('MyError', 'comment'); }).toThrow('MyError'); + expect($exceptionHandler.errors[1]).toEqual(['MyError', 'comment']); + }); + }); + it('should throw on wrong argument', function() { module(function($exceptionHandlerProvider) { expect(function() {