예제 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 이제는 서로 연관된 두 함수(addRule과 verify)가 함께 실행되어야 한다. 상태 값(rules)을 다루는 코드 특성상 두 함수가 반드시 결합(coupling)되어야 한다. 내부 상태를 노출하지 않고도 효과적으로 테스트하려면 두 함수를 사용해야 한다.22