코드가 꽤 길지만, 콜백 패턴 응용 코드의 테스트 목적을 이해했다면 그리 복잡할 것도 없다. 콜백 기능에 초점을 둔 이 테스트는 다음 두 가지를 확인한다.
• 콜백 실행 횟수가 정확하다.
• 콜백이 실행될 때마다 알맞은 인자가 전달된다.
테스트 목적을 달성하려면 매번 함수를 실행할 때마다 수신한 인자 등을 기록할 일종의 콜백 함수가 필요하다. 2장에서 배운 재스민 스파이가 바로 이런 일(사실 더 많은 일을 할 수 있다)에 제격이다.
예제 5-2에서 iterate 함수의 테스트는 재스민 스파이 인스턴스 callbackSpy를 이용하는데, callbackSpy는 각 테스트 실행 전 beforeEach 블록에서 callbackSpy = jasmine.createSpy();로 초기화된다.
Note.
createSpy로 만든 스파이는 말 그대로 빈 껍데기 스파이(bare spy)다. spyOn(someObject, ‘someFunction’)처럼 만든 스파이와 달리 빈 껍데기 스파이는 이미 존재하는 객체나 감시할 대상 함수가 필요 없다.
따라서 호출 추적 정도의 ‘감시 행위’ 이상의 활동은 기대하기 어렵다. 즉, 빈 껍데기 스파이는 감시할 함수(이런 함수 자체가 없다)를 호출한 후 구현부로 흘러들어 가게 하거나 다른 함수를 함께 호출하는 기능 따위는 없다.
이러한 한계는 있지만, 콜백 함수가 제대로 실행되었는지 확인하는 용도로는 딱이다.