단위 테스트가 성공한 순간 환호성을 지르며 기뻐하는 승현에게 샬럿이 급히 다가온다. 그에게 예제 6-7과 6-8을 짚어가며 주석에서 별 표시한 부분의 번호 순서대로 자신만만하게 설명한다.
1. “예제 6-7부터 보자. beforeEach에서 재스민 AJAX 모의 라이브러리를 설치하고 afterEach에서 안전하게 제거해.” 승현이 말한다. “각 테스트 도중 재스민은 모든 XMLHttpRequest를 가로채어 내가 지정한 일을 시키는 거야.”
2. “가령, 첫 번째 테스트에서 then 메서드에 기대식을 써넣고 recordCheckIn을 실행해보면…… 아직 then에 있는 함수는 실행되지 않아. 다시 말하지만, Promise는 비동기적이라서 테스트가 이벤트 루프에서 아직 자기 차례를 넘겨주지 않았거든.”
3. “자, 그럼 예제 6-8로 가서…… recordCheckIn에서 Promise 생성자에 전달한 함수가 실행되겠지? 재스민이 만든 가짜 FakeXMLHttpRequest 객체로 말이야.”
4 “다시 예제 6-7로 돌아와…… recordCheckIn을 호출한 후에 FakeXMLHttpRequest로 jasmine.Ajax.requests.mostRecent()를 호출해서 만든 요청 객체를 가져와.”
5. “올바른 URL로 호출한 요청인지 확인한 다음,”
6. “request.response를 호출해서 요청에 대한 응답을 일으키지.”
7. “그러면 파라미터의 객체 리터럴을 checkInRecorder에서 받을 테고(예제 6-8), 이 Promise는 테스트에서 건네준 responseText로 귀결될 거야.”
8. “그러면 예제 6-7 단위 테스트에서 then은 promiseResolved로 이어지고 기대식이 참이면 테스트는 성공하겠지.”
9. “실은, request.response()가 현재 이벤트 루프 차례 내에서 Promise를 귀결시키니까 엄밀히 말해 이 단위 테스트는 완벽한 비동기는 아냐. 그러고 보면 재스민 done() 역시 필요가 없겠지. 하지만……” 승현은 자기만족에 취해 샬럿을 보고 씩 웃는다. "뭐 그렇다고 나쁠 건 없잖아?"