이제 한 단계 더 나아가 보자. 중복을 제거하는 과정에서 beforeEach() 함수에서 verify()를 호출하고 각 it() 함수에서 불필요한 한 줄을 제거할 수 있다. 이는 기본적으로 AAA 패턴의 준비(Arrange)와 실행(Act) 부분을 beforeEach() 함수로 옮기는 작업이다.
예제 2-14 준비와 실행 부분을 beforeEach() 함수로 옮기기
// __tests__/password-verifier1.spec.js
describe('PasswordVerifier', () => {
let verifier;
beforeEach(() => verifier = new PasswordVerifier1());
describe('with a failing rule', () => {
let fakeRule, errors;
beforeEach(() => {
fakeRule = input => ({ passed: false, reason: 'fake reason' });
verifier.addRule(fakeRule);
errors = verifier.verify('any value');
});
it('has an error message based on the rule.reason', () => {
expect(errors[0]).toContain('fake reason');
});