Published on

Reducer 테스트하기

유닛 테스트를 통해 reducer의 순수함수 로직들을 테스트한다.

reducer에 현재상태 + action(with payload) 를 전달하여 다음 상태가 올바르게 변경되었는지 체크한다.

// reducer
const initialState = 0;

const reducer = (state = initialState, action) => {
  switch (action.type) {
    case 'INCREMENT_BY':
      return state + action.payload;
    case 'DECREMENT_BY':
      return state - action.payload;
    default:
      return state;
  }
};
describe('test reducer', () => {
  it('should return 0 as initial state', () => {
    expect(reducer(undefined, {})).toEqual(0);
  });

  it('should handle INCREMENT_BY', () => {
    expect(
      reducer(0, {
        type: 'INCREMENT_BY',
        value: 2,
      })
    ).toEqual(2);

    expect(
      reducer(5, {
        type: 'INCREMENT_BY',
        value: 10,
      })
    ).toEqual(15);
  });

  it('should handle DECREMENT_BY', () => {
    expect(
      reducer(5, {
        type: 'DECREMENT_BY',
        value: 2,
      })
    ).toEqual(3);
  });
});

다음과 같이 snapshot 테스트를 이용할수도 있다.

it('should handle DECREMENT_BY', () => {
  const newState = reducer(5, {
    type: 'DECREMENT_BY',
    value: 2,
  });

  expect(newState).toMatchSnapshot();
});

참조