import { exampleStore as store } from '@/store/modules/example';
describe('example store test', () => {
it('counter의 기본값은 0이 되어야한다', () => {
expect(store.state.counter).toEqual(0);
});
});
// store/modules/example
export const exampleStore = {
state: {
counter: 0,
},
};
it('getters는 state의 counter를 가져온다', () => {
const state = {
counter: 0,
};
expect(store.getters.GET_COUNTER(state)).toEqual(state.counter);
});
// store/modules/
export const GET_COUNTER = 'GET_COUNTER';
// store/modules/example
import { GET_COUNTER } from './example-types';
export const exampleStore = {
state: {
counter: 0,
},
getters: {
[GET_COUNTER]: (state) => state.counter,
},
};
it('counter의 값을 1 증가 시킨다', () => {
const state = {
counter: 0,
};
store.mutations.SET_COUNTER(state);
expect(state.counter).toEqual(1);
});
// store/modules/example
import { GET_COUNTER, SET_COUNTER } from './example-types';
export const exampleStore = {
state: {
counter: 0,
},
getters: {
[GET_COUNTER]: (state) => state.counter,
},
mutations: {
[SET_COUNTER]: (state) => state.counter++,
},
};
// store/modules/
export const GET_COUNTER = 'GET_COUNTER';
export const SET_COUNTER = 'SET_COUNTER';
버튼 클릭 > actions의 메서드 호출 > (optional 로직수행) > mutations의 메서드 호출 > 숫자 증가
it('actions시 mutation을 호출 해야한다', () => {
const commit = jest.fn();
store.actions.SET_COUNTER({ commit });
expect(commit).toHaveBeenCalledWith('SET_COUNTER');
});
// store/modules/example
import { GET_COUNTER, SET_COUNTER } from './example-types';
export const exampleStore = {
state: {
counter: 0,
},
getters: {
[GET_COUNTER]: (state) => state.counter,
},
mutations: {
[SET_COUNTER]: (state) => state.counter++,
},
actions: {
[SET_COUNTER]: ({ commit }) => {
commit(SET_COUNTER);
},
},
};
이렇게 하여 정말 간단한 Vuex(store) 테스트가 완성되었다.
import { exampleStore as store } from '@/store/modules/example';
describe('example store test', () => {
let state;
beforeEach(() => {
state = {
counter: 0,
};
});
it('counter의 기본값은 0이 되어야한다', () => {
expect(store.state.counter).toEqual(0);
});
it('getters는 state의 counter를 가져온다', () => {
expect(store.getters.GET_COUNTER(state)).toEqual(state.counter);
});
it('counter의 값을 1 증가 시킨다', () => {
store.mutations.SET_COUNTER(state);
expect(state.counter).toEqual(1);
});
it('actions시 mutation을 호출 해야한다', () => {
const commit = jest.fn();
store.actions.SET_COUNTER({ commit });
expect(commit).toHaveBeenCalledWith('SET_COUNTER');
});
});
장훈님 안녕하세요 하나 여쭤보고싶은게 있어서 글을 남겨요.
먼저 Jest이용한 TDD방식의 포스팅 덕분에 많은 도움이 되었습니다. :)
다름아니라 현재도 개발을 TDD방식으로 진행 중이신지 궁금하네요.
그리고 테스트 주도 개발 방식으로 진행 중이시라면 현재 느끼는 가장 큰 이점이 무엇이실까요?
만약 아니시라면 왜 TDD방식을 쓰지 않으시는지도 궁금하네요.
TDD를 도입해보고 싶어 선적용하여 공부 중인데 앞서 포스팅에 남기신 말씀처럼 10-30% 정도는 더 시간이 소요될 것으로 느껴집니다. 더군다나 예외상황에 경험이 없는 개발자가 진행시에 TDD가 크게 이점을 줄거같지 않다라는 생각을 하게 되었습니다. 프로젝트에 도입을 해보고싶은데 실제 쓰고 계신 개발자분들의 의견도 한번 듣고 싶어서 이렇게 글을 남기게 되었습니다. 말이 길었네요 ㅎㅎ 좋은 하루 되세요!