reducerTester.test.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { reducerFactory, actionCreatorFactory } from 'app/core/redux';
  2. import { reducerTester } from './reducerTester';
  3. interface DummyState {
  4. data: string[];
  5. }
  6. const initialState: DummyState = {
  7. data: [],
  8. };
  9. const dummyAction = actionCreatorFactory<string>('dummyAction').create();
  10. const mutatingReducer = reducerFactory(initialState)
  11. .addMapper({
  12. filter: dummyAction,
  13. mapper: (state, action) => {
  14. state.data.push(action.payload);
  15. return state;
  16. },
  17. })
  18. .create();
  19. const okReducer = reducerFactory(initialState)
  20. .addMapper({
  21. filter: dummyAction,
  22. mapper: (state, action) => {
  23. return {
  24. ...state,
  25. data: state.data.concat(action.payload),
  26. };
  27. },
  28. })
  29. .create();
  30. describe('reducerTester', () => {
  31. describe('when reducer mutates state', () => {
  32. it('then it should throw', () => {
  33. expect(() => {
  34. reducerTester()
  35. .givenReducer(mutatingReducer, initialState)
  36. .whenActionIsDispatched(dummyAction('some string'));
  37. }).toThrow();
  38. });
  39. });
  40. describe('when reducer does not mutate state', () => {
  41. it('then it should not throw', () => {
  42. expect(() => {
  43. reducerTester()
  44. .givenReducer(okReducer, initialState)
  45. .whenActionIsDispatched(dummyAction('some string'));
  46. }).not.toThrow();
  47. });
  48. });
  49. });