2020-10-26 15:18:23 +03:00
|
|
|
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)(
|
2023-07-12 21:03:20 +03:00
|
|
|
mockStoreWithoutMiddleware,
|
2020-10-26 15:18:23 +03:00
|
|
|
);
|
|
|
|
|
|
|
|
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));
|
|
|
|
});
|
|
|
|
});
|