mirror of
				https://github.com/reduxjs/redux-devtools.git
				synced 2025-10-31 16:07:45 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import expect from 'expect';
 | |
| import { applyMiddleware } from 'redux';
 | |
| import thunk from 'redux-thunk';
 | |
| import * as actions from '../../actions/counter';
 | |
| 
 | |
| const middlewares = [thunk];
 | |
| 
 | |
| /*
 | |
|  * Creates a mock of Redux store with middleware.
 | |
|  */
 | |
| function mockStore(getState, expectedActions, onLastAction) {
 | |
|   if (!Array.isArray(expectedActions)) {
 | |
|     throw new Error('expectedActions should be an array of expected actions.');
 | |
|   }
 | |
|   if (
 | |
|     typeof onLastAction !== 'undefined' &&
 | |
|     typeof onLastAction !== 'function'
 | |
|   ) {
 | |
|     throw new Error('onLastAction should either be undefined or function.');
 | |
|   }
 | |
| 
 | |
|   function mockStoreWithoutMiddleware() {
 | |
|     return {
 | |
|       getState() {
 | |
|         return typeof getState === 'function' ? getState() : getState;
 | |
|       },
 | |
| 
 | |
|       dispatch(action) {
 | |
|         const expectedAction = expectedActions.shift();
 | |
|         expect(action).toEqual(expectedAction);
 | |
|         if (onLastAction && !expectedActions.length) {
 | |
|           onLastAction();
 | |
|         }
 | |
|         return action;
 | |
|       },
 | |
|     };
 | |
|   }
 | |
| 
 | |
|   const mockStoreWithMiddleware = applyMiddleware(...middlewares)(
 | |
|     mockStoreWithoutMiddleware
 | |
|   );
 | |
| 
 | |
|   return mockStoreWithMiddleware();
 | |
| }
 | |
| 
 | |
| describe('actions', () => {
 | |
|   it('increment should create increment action', () => {
 | |
|     expect(actions.increment()).toEqual({ type: actions.INCREMENT_COUNTER });
 | |
|   });
 | |
| 
 | |
|   it('decrement should create decrement action', () => {
 | |
|     expect(actions.decrement()).toEqual({ type: actions.DECREMENT_COUNTER });
 | |
|   });
 | |
| 
 | |
|   it('incrementIfOdd should create increment action', (done) => {
 | |
|     const expectedActions = [{ type: actions.INCREMENT_COUNTER }];
 | |
|     const store = mockStore({ counter: 1 }, expectedActions, done);
 | |
|     store.dispatch(actions.incrementIfOdd());
 | |
|   });
 | |
| 
 | |
|   it('incrementIfOdd shouldnt create increment action if counter is even', (done) => {
 | |
|     const expectedActions = [];
 | |
|     const store = mockStore({ counter: 2 }, expectedActions);
 | |
|     store.dispatch(actions.incrementIfOdd());
 | |
|     done();
 | |
|   });
 | |
| 
 | |
|   it('incrementAsync should create increment action', (done) => {
 | |
|     const expectedActions = [{ type: actions.INCREMENT_COUNTER }];
 | |
|     const store = mockStore({ counter: 0 }, expectedActions, done);
 | |
|     store.dispatch(actions.incrementAsync(100));
 | |
|   });
 | |
| });
 |