Testing & Performance
Testing Redux Slices
Basic Reducer Tests
// user.slice.test.ts
import reducer, { userLoggedIn, userLoggedOut } from './user.slice';
describe('user slice', () => {
const initialState = {
account: null,
isAuthenticated: false,
};
it('should handle userLoggedIn', () => {
const account = '0x123...';
const actual = reducer(initialState, userLoggedIn({ account }));
expect(actual.account).toBe(account);
expect(actual.isAuthenticated).toBe(true);
});
it('should handle userLoggedOut', () => {
const loggedInState = {
account: '0x123...',
isAuthenticated: true,
};
const actual = reducer(loggedInState, userLoggedOut());
expect(actual.account).toBeNull();
expect(actual.isAuthenticated).toBe(false);
});
});Testing Entity Adapters
Testing Selectors
Simple Selectors
Memoized Selectors
Testing RTK Query with MSW
Setup MSW
Testing Queries
Testing Mutations
Testing Optimistic Updates
Performance Optimization
Use selectFromResult to Prevent Re-renders
selectFromResult to Prevent Re-rendersAvoid Selecting Entire State
Memoize Expensive Selectors
Use Entity Adapters for Normalized Data
Tune RTK Query Cache Settings
Prefetch for Better UX
Polling Strategy
Redux DevTools
Enable in Development
Action Sanitizer
Best Practices Checklist
Performance
Testing
Code Quality
Anti-Patterns to Avoid
Monitoring Performance
Track Selector Calls
Monitor Re-renders
Next Steps
Last updated