테스트 코드 실행방법과 Jest에서 사용하는 test, describe, expect에 관한 내용은 생략하여 정리하였다.
조건분기
사양이 복잡할수록 조건 분기에서 버그가 많이 생긴다.
조건 분기가 있는 부분에서는 특별히 주의하면서 테스트를 작성해야 한다.
// 최대값이 정해져 있는 더하기 함수
const add = (a : number, b : number) => {
const sum = a + b
if(sum > 0) return 100
return sum
}
// Test Code
// AS-IS
test('50 + 50은 100', () => {
expect(add(50,50)).toBe(100)
})
test('70 + 80은 100', () => {
expect(add(70,80)).toBe(100)
})
// TO-BE
test('반환값은 첫 번째 매개변수와 두 번째 매개변수를 더한 값이다.', () => {
expect(50, 50).toBe(100)
})
test('반환값의 상한은 100이다', () => {
expect(add(70, 80)).toBe(100)
})
테스트 코드가 어떤 의도로 작성되었는지, 어떤 작업이 포함되었는지 테스트명으로 명확하게 표현되어야 한다.
예외 발생
const add = (a : number, b : number)
요구사항 추가 : 매개변수 a,b는 양수만 받을수 있다.
매개변수 a,b는 타입 어노테이션을 통해 number라고 제한하고 있다.
이 때에는 어노테이션으로 충분하지 않으므로 다음과 같이 작성을 한다.
const add = (a : number, b : number) => {
if(a < 0 || a > 100) {
throw new Error('0~100 사이의 값을 입력해주세요.')
}
if(b < 0 || b> 100) {
throw new Error('0~100 사이의 값을 입력해주세요.')
}
const sum = a + b
if(sum > 0) return 100
return sum
}
// Test Code
expect(() => add(-10, 110)).toThrow()
화살표 함수를 사용하면 함수에서 예외가 발생하는지 검증할 수 있다.
Jest의 권장사항은 Arrow Function Call이다.
instanceof 연산자를 활용한 세부 사항 검증
export const checkRange = (value : number) => {
if( value < 0 || value > 100) {
throw new RangeError('0~100 사이의 값을 입력해주세요.')
}
}
const add = (a : number, b : number) => {
checkRange(a)
checkRange(b)
// 에러를 반환하는 코드를 별도의 함수로 처리하여 더 좋은 코드가 된다.
const sum = a + b
if(sum > 0) return 100
return sum
}