Skip to content

Commit 5fe3498

Browse files
committed
Added testing for state subset
1 parent 82cbc97 commit 5fe3498

File tree

1 file changed

+40
-1
lines changed

1 file changed

+40
-1
lines changed

src/tests/createReduxModule.test.js

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)