더북(TheBook)

예제 2-11 상태 기반 작업 단위 테스트

// __tests__/password-verifier1.spec.js
describe('PasswordVerifier', () => {
    describe('with a failing rule', () => {
        it('has an error message based on the rule.reason', () => {
            const verifier = new PasswordVerifier1();
            const fakeRule = () => ({
                passed: false,
                reason: 'fake reason',
            });

            verifier.addRule(fakeRule);
            const errors = verifier.verify('any value');

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

여기까지는 특별한 일이 일어나지 않았다. 하지만 작업 단위의 표면적 범위가 넓어졌다는 점에 주목하자.21 이제는 서로 연관된 두 함수(addRuleverify)가 함께 실행되어야 한다. 상태 값(rules)을 다루는 코드 특성상 두 함수가 반드시 결합(coupling)되어야 한다. 내부 상태를 노출하지 않고도 효과적으로 테스트하려면 두 함수를 사용해야 한다.22

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