더북(TheBook)

구역을 나누는 방식은 사람마다 호불호가 갈리지만, 필자는 이 방법이 테스트를 더욱 우아하게 만드는 방법이라고 생각한다. 구역을 나누면 앞서 소개한 USE 전략의 세 가지 요소를 명확하게 분리할 수 있다. 예제 2-7에서는 describe() 구역이 두 개 중첩되어 있는데, fakeRule()test() 구역보다 한 단계 위로 올릴 수도 있다.19

예제 2-8 fakeRule() 함수를 한 단계 위로 올리기

// __tests__/password-verifier0.spec.js
describe('verifyPassword', () => {
    describe('with a failing rule', () => {
        const fakeRule = () => ({ 
            passed: false,
            reason: 'fake reason'
        });

        test('returns errors', () => {
            const errors = verifyPassword('any value', [fakeRule]);

            expect(errors[0]).toContain('fake reason');
        });
    });
});

fakeRule() 함수를 test() 구역보다 한 단계 위로 끌어올렸다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.