mirror of
				https://github.com/reduxjs/redux-devtools.git
				synced 2025-10-30 23:47:35 +03:00 
			
		
		
		
	add tests for persistState.js
This commit is contained in:
		
							parent
							
								
									eb9ecb1e65
								
							
						
					
					
						commit
						95a2636370
					
				|  | @ -65,7 +65,7 @@ export default function persistState(sessionId, stateDeserializer = null, action | ||||||
|         try { |         try { | ||||||
|           localStorage.setItem(key, JSON.stringify(store.getState())); |           localStorage.setItem(key, JSON.stringify(store.getState())); | ||||||
|         } catch (e) { |         } catch (e) { | ||||||
|           console.warn('Could not write debug session from localStorage:', e); |           console.warn('Could not write debug session to localStorage:', e); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return action; |         return action; | ||||||
|  |  | ||||||
							
								
								
									
										123
									
								
								test/persistState.spec.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								test/persistState.spec.js
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,123 @@ | ||||||
|  | import expect from 'expect'; | ||||||
|  | import devTools from '../src/devTools'; | ||||||
|  | import persistState from '../src/persistState'; | ||||||
|  | import { compose, createStore } from 'redux'; | ||||||
|  | 
 | ||||||
|  | describe('persistState', () => { | ||||||
|  |   let savedLocalStorage = global.localStorage; | ||||||
|  | 
 | ||||||
|  |   beforeEach(() => { | ||||||
|  |     global.localStorage = { | ||||||
|  |       store: {}, | ||||||
|  |       getItem(key) { | ||||||
|  |         return this.store[key] || null; | ||||||
|  |       }, | ||||||
|  |       setItem(key, value) { | ||||||
|  |         this.store[key] = value; | ||||||
|  |       }, | ||||||
|  |       removeItem(key) { | ||||||
|  |         delete this.store[key]; | ||||||
|  |       }, | ||||||
|  |       clear() { | ||||||
|  |         this.store = {}; | ||||||
|  |       } | ||||||
|  |     }; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   after(() => { | ||||||
|  |     global.localStorage = savedLocalStorage; | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   const reducer = (state = 0, action) => { | ||||||
|  |     switch (action.type) { | ||||||
|  |     case 'INCREMENT': | ||||||
|  |       return state + 1; | ||||||
|  |     case 'DECREMENT': | ||||||
|  |       return state - 1; | ||||||
|  |     default: | ||||||
|  |       return state; | ||||||
|  |     } | ||||||
|  |   }; | ||||||
|  | 
 | ||||||
|  |   it('should persist state', () => { | ||||||
|  |     const finalCreateStore = compose(devTools(), persistState('id'))(createStore); | ||||||
|  |     const store = finalCreateStore(reducer); | ||||||
|  |     expect(store.getState()).toBe(0); | ||||||
|  | 
 | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     expect(store.getState()).toBe(2); | ||||||
|  | 
 | ||||||
|  |     const store2 = finalCreateStore(reducer); | ||||||
|  |     expect(store2.getState()).toBe(2); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('should not persist state if no session id', () => { | ||||||
|  |     const finalCreateStore = compose(devTools(), persistState())(createStore); | ||||||
|  |     const store = finalCreateStore(reducer); | ||||||
|  |     expect(store.getState()).toBe(0); | ||||||
|  | 
 | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     expect(store.getState()).toBe(2); | ||||||
|  | 
 | ||||||
|  |     const store2 = finalCreateStore(reducer); | ||||||
|  |     expect(store2.getState()).toBe(0); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('should run with a custom state deserializer', () => { | ||||||
|  |     const oneLess = state => state === undefined ? -1 : state - 1; | ||||||
|  |     const finalCreateStore = compose(devTools(), persistState('id', oneLess))(createStore); | ||||||
|  |     const store = finalCreateStore(reducer); | ||||||
|  |     expect(store.getState()).toBe(0); | ||||||
|  | 
 | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     expect(store.getState()).toBe(2); | ||||||
|  | 
 | ||||||
|  |     const store2 = finalCreateStore(reducer); | ||||||
|  |     expect(store2.getState()).toBe(1); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('should run with a custom action deserializer', () => { | ||||||
|  |     const incToDec = action => action.type === 'INCREMENT' ? { type: 'DECREMENT' } : action; | ||||||
|  |     const finalCreateStore = compose(devTools(), persistState('id', null, incToDec))(createStore); | ||||||
|  |     const store = finalCreateStore(reducer); | ||||||
|  |     expect(store.getState()).toBe(0); | ||||||
|  | 
 | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     expect(store.getState()).toBe(2); | ||||||
|  | 
 | ||||||
|  |     const store2 = finalCreateStore(reducer); | ||||||
|  |     expect(store2.getState()).toBe(-2); | ||||||
|  |   }); | ||||||
|  | 
 | ||||||
|  |   it('should warn if read from localStorage fails', () => { | ||||||
|  |     const spy = expect.spyOn(console, 'warn'); | ||||||
|  |     const finalCreateStore = compose(devTools(), persistState('id'))(createStore); | ||||||
|  |     delete global.localStorage.getItem; | ||||||
|  |     finalCreateStore(reducer); | ||||||
|  | 
 | ||||||
|  |     expect(spy.calls).toContain( | ||||||
|  |       /Could not read debug session from localStorage/, | ||||||
|  |       (call, errMsg) => call.arguments[0].match(errMsg) | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     spy.restore(); | ||||||
|  |   }); | ||||||
|  |   it('should warn if write to localStorage fails', () => { | ||||||
|  |     const spy = expect.spyOn(console, 'warn'); | ||||||
|  |     const finalCreateStore = compose(devTools(), persistState('id'))(createStore); | ||||||
|  |     delete global.localStorage.setItem; | ||||||
|  |     const store = finalCreateStore(reducer); | ||||||
|  | 
 | ||||||
|  |     store.dispatch({ type: 'INCREMENT' }); | ||||||
|  |     expect(spy.calls).toContain( | ||||||
|  |       /Could not write debug session to localStorage/, | ||||||
|  |       (call, errMsg) => call.arguments[0].match(errMsg) | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     spy.restore(); | ||||||
|  |   }); | ||||||
|  | }); | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user