우리가 테스트하고 싶은 것은 대문자가 어디에 위치해 있느냐가 아니라 대문자를 포함하고 있는지 여부다. 하지만 이러한 중복은 나중에 대문자를 검사하는 로직을 변경하거나 oneUpperCaseRule() 함수를 사용하는 코드 일부를 수정해야 할 때 문제가 될 수 있다.
자바스크립트에서 다양한 입력 값을 테스트하는 방법은 여러 가지가 있다. 제스트는 이러한 기능을 내장한 test.each()(또는 it.each()) 함수를 제공한다. 다음 예제는 이 기능을 이용하여 테스트 중복을 제거하는 방법을 보여 준다.
예제 2-21 test.each() 함수를 사용하여 중복 없애기
// __tests__/password-rules.spec.js
describe('one uppercase rule', () => {
test('given no uppercase, it fails', () => {
const result = oneUpperCaseRule('abc');
expect(result.passed).toEqual(false);
});
test.each(['Abc', ➊
'aBc'])('given one uppercase, it passes', (input) => { ➋
const result = oneUpperCaseRule(input);
expect(result.passed).toEqual(true);
});
});
➊ 배열을 test.each() 함수에 하나의 입력 값으로 전달한다.
➋ 배열을 순회하며 각 함수 실행마다 매개변수를 전달받는다.