📱인프런 모바일 App 😆

onCompleted와 onDeleted를 따로 describe로 나누시는 이유가 궁금합니다.

해결됨
박동조 박 프로필

안녕하세요. 궁금한 점이 있어 질문 올립니다.

 TodoItem.spec.js 에서

 onCompleted callback 하는 단위 테스트와

 onDeleted callback 하는 단위 테스트를 각각 describe 해서 그룹테스트로 나누시던데, 그 이유가 궁금합니다.

 

beforeEach(() => {
// 테스트 진행 이전 호출
props = {
item: {
text: 'first todo',
done: false
},
index: 0,
onCompleted: jest.fn(),
onDeleted: jest.fn()
}

wrapper = shallow(<TodoItem {...props}></TodoItem>);
wrapper.find('Button').at(0).simulate('press');
wrapper.find('Button').at(1).simulate('press');
// wrapper.find('Button').prop('onPress')();
})

it('should call the onCompleted callback with index', () => {
expect(props.onCompleted).toHaveBeenCalledTimes(1);
expect(props.onCompleted).toHaveBeenCalledWith(props.index);
})

it('should call the onDeleted callback with index', () => {
expect(props.onDeleted).toHaveBeenCalledTimes(1);
expect(props.onDeleted).toHaveBeenCalledWith(props.index);
})

왜 위와 같이 같은 describe 그룹테스트 안에 안두시나요?

개념적으로 제가 부족한건 아닌가 싶어서 질문드렸습니다.

박동호 프로필
박동호 6일 전

우선 제가 각각을 describe 그룹으로 나눈것은 각각의 callback 에 대한 다양한 테스트를 염두에 두고 설계를 하였기 때문입니다. 결과적으로 각 그룹에 하나의 테스트만 진행되었기 때문에 그룹화 한 이유가 사라져버려서 혼란을 드린것 같네요. 질문해주신것처럼, 하나의 describe 그룹으로 묶으도 상관 없을것 같습니다.

테스트를 설계하실때 describe / it 을 프로그래밍이라고 생각하지 않고, 수도코드를 작성한다고 생각하시고 설계하시면 좋습니다. 

예를들어, 공이라는 클래스를 테스트한다고 가정하면,

공을 설명한다(describe 공)

    공의 동작을 설명한다(describe 공의동작)          

        공은 중력의 법칙을 따른다(it should follow the rule of gravity)

        공은 관성의 법칙을 따른다(it should follow the rule of inertia)

    공의 외관을 설명한다(describe 공의 외관)

        공은 둥글다(it should have the shape of a sphere)

위와 같이 설계를 할 수도 있지만, 중력의 법칙에 여러 다른 it 구문을 포함시키려면 이를 다시 describe 블럭으로 분리시킬 수도 있을것입니다.

대답이 되었으면 좋겠네요 ^^

박동조 박 프로필
박동조 박 6일 전

감사합니다. 상세히 설명해주신 덕분에 의문이 싹 가셨습니다. 감사합니다 (_ _)