Permalink
Browse files

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
  • Loading branch information...
1 parent b43fa3b commit deb3cb4daef0054457bd9fb8995829fff0e8f1e4 @DavidSouther DavidSouther committed with petebacondarwin Dec 23, 2014
Showing with 22 additions and 9 deletions.
  1. +9 −9 src/ngMock/angular-mocks.js
  2. +13 −0 test/ngMock/angular-mocksSpec.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':
+ 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:
@@ -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() {

0 comments on commit deb3cb4

Please sign in to comment.