더북(TheBook)
const passwordVerifierFactory = (rules) => {
    return new PasswordVerifier(new RealTimeProvider());
};

이러한 설계에서 가짜 함수 대신 가짜 객체를 주입해야 한다면 테스트에서는 이를 어떻게 처리할 수 있을까? 우선 직접 만들어 보면서 코드가 어떻게 전개될지 살펴보자. 직접 보게 되면 생각보다 별것 아니라고 느낄 것이다. 직접 만든 후에는 제스트나 자스민, 사이넌 등 프레임워크(5장에서 더 자세히 다룬다)가 제공하는 기능을 이용해서도 만들어 볼 예정이다. 직접 만드는 방식을 보여 주려는 것은 때로는 프레임워크를 거치지 않고 만드는 방식이 오히려 가독성이 좋을 때도 있다는 것을 알려 주기 위함이다.

먼저 테스트 파일 내에서 RealTimeProvider와 동일한 시그니처를 가지는 FakeTimeProvider를 만들어 보자. FakeTimeProvider는 테스트 내에서 제어할 수 있는 가짜 객체를 만드는 함수로, 생성자 패턴을 이용해서 만들 수 있다.

function FakeTimeProvider(fakeDay) {
    this.getDay = function () {
        return fakeDay;
    };
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.