구역을 나누는 방식은 사람마다 호불호가 갈리지만, 필자는 이 방법이 테스트를 더욱 우아하게 만드는 방법이라고 생각한다. 구역을 나누면 앞서 소개한 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() 구역보다 한 단계 위로 끌어올렸다.