@@ -60,6 +60,10 @@ describe('createActionListenerMiddleware', () => {
60
60
const testAction3 = createAction < string > ( 'testAction3' )
61
61
type TestAction3 = ReturnType < typeof testAction3 >
62
62
63
+ beforeAll ( ( ) => {
64
+ jest . spyOn ( console , 'error' ) . mockImplementation ( noop )
65
+ } )
66
+
63
67
beforeEach ( ( ) => {
64
68
middleware = createActionListenerMiddleware ( )
65
69
reducer = jest . fn ( ( ) => ( { } ) )
@@ -461,7 +465,7 @@ describe('createActionListenerMiddleware', () => {
461
465
expect ( reducer . mock . calls ) . toEqual ( [ [ { } , testAction1 ( 'a' ) ] ] )
462
466
} )
463
467
464
- test ( 'Continues running other listeners if there is an error' , ( ) => {
468
+ test ( 'Continues running other listeners if one of them raises an error' , ( ) => {
465
469
const matcher = ( action : any ) => true
466
470
467
471
middleware . addListener ( matcher , ( ) => {
@@ -475,6 +479,47 @@ describe('createActionListenerMiddleware', () => {
475
479
expect ( listener . mock . calls ) . toEqual ( [ [ testAction1 ( 'a' ) , middlewareApi ] ] )
476
480
} )
477
481
482
+ test ( 'Continues running other listeners if a predicate raises an error' , ( ) => {
483
+ const matcher = ( action : any ) => true
484
+ const firstListener = jest . fn ( ( ) => { } )
485
+ const secondListener = jest . fn ( ( ) => { } )
486
+
487
+ middleware . addListener ( ( ) => {
488
+ throw new Error ( 'Predicate Panic!' )
489
+ } , firstListener ) ;
490
+
491
+ middleware . addListener ( matcher , secondListener )
492
+
493
+ store . dispatch ( testAction1 ( 'a' ) )
494
+ expect ( firstListener ) . not . toHaveBeenCalled ( ) ;
495
+ expect ( secondListener . mock . calls ) . toEqual ( [
496
+ [ testAction1 ( 'a' ) , middlewareApi ] ,
497
+ ] )
498
+ } )
499
+
500
+ test ( 'Notifies listener errors to `onError`, if provided' , ( ) => {
501
+ const onError = jest . fn ( ) ;
502
+ middleware = createActionListenerMiddleware ( {
503
+ onError
504
+ } )
505
+ reducer = jest . fn ( ( ) => ( { } ) )
506
+ store = configureStore ( {
507
+ reducer,
508
+ middleware : ( gDM ) => gDM ( ) . prepend ( middleware ) ,
509
+ } )
510
+
511
+ const listenerError = new Error ( 'Boom!' ) ;
512
+
513
+ const matcher = ( action : any ) => true
514
+
515
+ middleware . addListener ( matcher , ( ) => {
516
+ throw listenerError ;
517
+ } ) ;
518
+
519
+ store . dispatch ( testAction1 ( 'a' ) )
520
+ expect ( onError ) . toBeCalledWith ( listenerError ) ;
521
+ } )
522
+
478
523
test ( 'condition method resolves promise when the predicate succeeds' , async ( ) => {
479
524
const store = configureStore ( {
480
525
reducer : counterSlice . reducer ,
0 commit comments