더북(TheBook)

1. injectDate() 함수는 테스트에서 반복되는 코드(이러한 코드를 보일러 플레이트 코드라고 한다)를 줄이는 헬퍼 함수다. 이 함수는 moment.js 모듈을 가짜 객체로 만들어 moment().day() 함수가 () => newDay로 대체되도록 한다.11

2. injectDate() 함수는 내부에서 가짜로 만든 moment.js 모듈을 인수로 전달하며 inject() 함수를 호출한다. 매개변수로 newDay를 받아 가짜 의존성을 만드는데, 이렇게 만든 가짜 의존성을 모듈에 적용한다.

3. 테스트에서 가짜 날짜를 인수로 넘기면서 injectDate를 호출하여 의존성을 대체한다.

4. 테스트가 끝나면 reset() 함수를 호출하여 작업 단위 내에 있는 모듈 의존성을 원래 상태로 되돌린다.

 

몇 번 연습해 보면 쉽게 적응할 수 있다. 이 방식은 장점도 있지만 단점 역시 분명하다. 장점은 이 방법이 테스트에서 의존성 문제를 확실히 해결해 주며 사용하기도 비교적 쉽다는 것이다. 필자 눈에 보이는 커다란 단점인 모듈화된 의존성을 가짜로 만드는 이 방법은 테스트를 우리가 가짜로 만든 의존성의 API에 매우 강하게 묶이게 한다. 예를 들어 moment.js나 로거 함수 같은 코드의 제어권이 없는 외부 의존성을 사용하면, 기존 모듈 의존성을 새로운 모듈로 변경할 때 테스트를 전부 수정해야 하는 상황이 발생한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.