@@ -51,6 +51,41 @@ describe('createStore()', () => {
5151 expect ( sub1 ) . toHaveBeenLastCalledWith ( store . getState ( ) , undefined ) ;
5252 expect ( sub2 ) . toBeCalledWith ( store . getState ( ) , undefined ) ;
5353 } ) ;
54+ it ( 'should invoke all subscriptions at time of setState, no matter unsubscriptions' , ( ) => {
55+ let store = createStore ( ) ;
56+ let called = [ ] ;
57+ let unsub2 ;
58+ let sub1 = jest . fn ( ( ) => {
59+ called . push ( 1 ) ;
60+ } ) ;
61+ let sub2 = jest . fn ( ( ) => {
62+ called . push ( 2 ) ;
63+ unsub2 ( ) ; // unsubscribe during a listener callback
64+ } ) ;
65+ let sub3 = jest . fn ( ( ) => {
66+ called . push ( 3 ) ;
67+ } ) ;
68+ let unsub1 = store . subscribe ( sub1 ) ;
69+ unsub2 = store . subscribe ( sub2 ) ;
70+ let unsub3 = store . subscribe ( sub3 ) ;
71+ store . setState ( { a : 'a' } ) ;
72+ expect ( sub1 ) . toHaveBeenCalledTimes ( 1 ) ;
73+ expect ( sub2 ) . toHaveBeenCalledTimes ( 1 ) ;
74+ expect ( sub3 ) . toHaveBeenCalledTimes ( 1 ) ;
75+ expect ( called . sort ( ) ) . toEqual ( [ 1 , 2 , 3 ] ) ;
76+ store . setState ( { a : 'b' } ) ;
77+ expect ( sub1 ) . toHaveBeenCalledTimes ( 2 ) ;
78+ expect ( sub2 ) . toHaveBeenCalledTimes ( 1 ) ;
79+ expect ( sub3 ) . toHaveBeenCalledTimes ( 2 ) ;
80+ expect ( called . sort ( ) ) . toEqual ( [ 1 , 1 , 2 , 3 , 3 ] ) ;
81+ unsub1 ( ) ;
82+ unsub3 ( ) ;
83+ store . setState ( { a : 'c' } ) ;
84+ expect ( sub1 ) . toHaveBeenCalledTimes ( 2 ) ;
85+ expect ( sub2 ) . toHaveBeenCalledTimes ( 1 ) ;
86+ expect ( sub3 ) . toHaveBeenCalledTimes ( 2 ) ;
87+ expect ( called . sort ( ) ) . toEqual ( [ 1 , 1 , 2 , 3 , 3 ] ) ;
88+ } ) ;
5489 it ( 'should unsubscribe' , ( ) => {
5590 let store = createStore ( ) ;
5691 let sub1 = jest . fn ( ) ;
0 commit comments