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 { | ||||
|           localStorage.setItem(key, JSON.stringify(store.getState())); | ||||
|         } catch (e) { | ||||
|           console.warn('Could not write debug session from localStorage:', e); | ||||
|           console.warn('Could not write debug session to localStorage:', e); | ||||
|         } | ||||
| 
 | ||||
|         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