더북(TheBook)

두 번째 beforeEach에서 checkInRecorder.recordCheckIn에 심어둔 스파이가 Promise를 반환한다. 이 Promise이룸(fulfilled) 프라미스다. 메서드명이 Promise.fulfill이 아니라 Promise.resolve인 점이 다소 헷갈리는데, 이 장 뒷부분에서 다시 언급할 것이다.

Promise가 이루어졌기(귀결되었기(resolved))2then 메서드의 첫 번째 콜백이 호출되고, 이 콜백은 프라미스가 품고 있는 성공적인 처리 결과(checkInNumber)를 넘겨받는다. 이미 이루어진 상태의 Promise를 만드는 게 아무래도 지름길이지만, 현실적인 프라미스를 어떻게 생성하는지는 다음 절에서 다룬다.

조만간 벌어질 일들을 정리해보자.

1. 단위 테스트는 checkInService.checkIn을 호출한다.

2. 이 메서드는 recorder.recordCheckIn(예제 6-1 참고)을 호출한다.

3. recordCheckIn을 감시 중인 스파이는 recordCheckIncheckInNumber 값을 지닌 귀결 프라미스를 반환하도록 조작한다.

4. 이어서 recordCheckIn(attendee).then의 성공 콜백이 실행된다(예제 6-1을 다시 잘 보라).

5. 성공 콜백 attendee.setCheckInNumbercheckInNumber를 파라미터로 받는다.

6. 결국, 단위 테스트 마지막 줄의 기대식은 맞아 떨어진다!

단계별 내용은 정확하지만, 막상 테스트해보니 실패한다(그림 6-1).

►그림 6-1

 

2 역주 이 책은 두 용어, 즉 ‘귀결(resolved)’과 ‘이룸(fulfilled)’을 거의 같은 개념으로 보고 혼용하고 있습니다. 그러나 카일 심슨(Kyle Sympson)이 쓴 《비동기와 성능(한빛미디어, 2015)》에서는 ‘귀결’은 ‘이룸’과 ‘버림’ 어느 한쪽으로 상태가 결정되는 것을 나타내며, ‘미결(pending)’과 대조적인 의미가 있습니다. 본 역서에서는 원저의 용어를 그대로 따르지만, 역자 개인적으로도 ‘귀결’과 ‘이룸’은 분별하여 사용해야 맞는다고 봅니다.

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