mirror of
				https://github.com/reduxjs/redux-devtools.git
				synced 2025-11-04 09:57:26 +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));
 | 
						|
  });
 | 
						|
});
 |