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
Conflicts:
src/ngMock/angular-mocks.js
Loading branch information
Showing
2 changed files
with
23 additions
and
11 deletions .
+10
−11
src/ngMock/angular-mocks.js
+13
−0
test/ngMock/angular-mocksSpec.js
@@ -233,32 +233,31 @@ angular.mock.$ExceptionHandlerProvider = function() {
*
* @param {string } mode Mode of operation, defaults to `rethrow`.
*
* - `rethrow`: If any errors are passed into 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 ;
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 :
@@ -601,6 +601,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 ( ) {
Toggle all file notes