@@ -48,7 +48,7 @@ describe("reducers mode",() => {
4848
4949 it ( 'subscribeToName works' , ( ) => {
5050 updateName ( "Alice" )
51- const component = renderer . create ( < Provider > < App /> </ Provider > ) ;
51+ const component = renderer . create ( < Provider > < App /> </ Provider > ) ;
5252 expect ( component . toJSON ( ) ) . toMatchSnapshot ( ) ;
5353
5454 renderer . act ( ( ) => { updateName ( "Shane" ) ; } )
@@ -120,5 +120,44 @@ describe("duplicate action names", () => {
120120 expect ( getCountAState ( ) ) . toEqual ( 1 ) ;
121121 expect ( getCountBState ( ) ) . toEqual ( 0 ) ;
122122 } )
123+ } ) ;
123124
125+
126+ describe ( 'use state subset' , ( ) => {
127+ const STORE_KEY = 'subsetModeName' ;
128+ const [ useName , { setFirstName, setLastName} ] = createReduxModule (
129+ STORE_KEY ,
130+ {
131+ firstName : 'Marty' ,
132+ lastName : 'McFly'
133+ } ,
134+ {
135+ setFirstName : ( state , firstName ) => ( { ...state , firstName } ) ,
136+ setLastName : ( state , lastName ) => ( { ...state , lastName } )
137+ }
138+ )
139+
140+ const App = ( ) => {
141+ renderCount ++ ;
142+ return ( < p > Hello { useName ( ( { firstName} ) => firstName ) } !</ p > )
143+ }
144+
145+ let renderCount = 0 ;
146+
147+ it ( 'initial render' , ( ) => {
148+ renderer . create ( < Provider > < App /> </ Provider > )
149+ expect ( renderCount ) . toBe ( 1 ) ;
150+ } )
151+
152+ // Changing first name should trigger a render
153+ it ( 're-render on change' , ( ) => {
154+ renderer . act ( ( ) => { setFirstName ( 'Emmett' ) } )
155+ expect ( renderCount ) . toBe ( 2 ) ;
156+ } )
157+
158+ // Changing last name should not trigger a render
159+ it ( 'does not re-render on change' , ( ) => {
160+ renderer . act ( ( ) => { setLastName ( 'Brown' ) } )
161+ expect ( renderCount ) . toBe ( 2 ) ;
162+ } )
124163} ) ;
0 commit comments