더북(TheBook)

단위 테스트가 성공한 순간 환호성을 지르며 기뻐하는 승현에게 샬럿이 급히 다가온다. 그에게 예제 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을 호출한 후에 FakeXMLHttpRequestjasmine.Ajax.requests.mostRecent()를 호출해서 만든 요청 객체를 가져와.”

5. “올바른 URL로 호출한 요청인지 확인한 다음,”

6.request.response를 호출해서 요청에 대한 응답을 일으키지.”

7. “그러면 파라미터의 객체 리터럴을 checkInRecorder에서 받을 테고(예제 6-8), 이 Promise는 테스트에서 건네준 responseText로 귀결될 거야.”

8. “그러면 예제 6-7 단위 테스트에서 thenpromiseResolved로 이어지고 기대식이 참이면 테스트는 성공하겠지.”

9. “실은, request.response()가 현재 이벤트 루프 차례 내에서 Promise를 귀결시키니까 엄밀히 말해 이 단위 테스트는 완벽한 비동기는 아냐. 그러고 보면 재스민 done() 역시 필요가 없겠지. 하지만……” 승현은 자기만족에 취해 샬럿을 보고 씩 웃는다. "뭐 그렇다고 나쁠 건 없잖아?"

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