여러 군데 손을 댔다.
우선, 기대식에서 정확한 메시지를 확인할 수 있게 단위 테스트에 메시지를 표출했다. 무엇보다 이 장의 요점에 맞추어 아주 정확하게 Promise를 생성했다.
• Promise를 new로 생성한다.
• 생성자에 두 인자가 있는 함수를 인자로 넣는다. 이 함수는 언제라도 호출할 수 있지만, resolve와 reject라는 의미를 지닌다.
• Promise를 어떤 값으로 이루려면 그 값으로 resolve를 호출한다.
• Promise를 버리려면 버림 사유로 reject를 호출한다. 보통 Error 객체를 사유로 많이 쓰는데, 이는 스택 추적이 쉽기 때문이다.
• done()을 빠뜨리지 말자.
승현은 잠시 고개를 갸우뚱하더니 콜백에서 Promise.resolve와 Promise.reject를 반환하지 말고 아예 처음부터 checkInService.checkIn에서 직접 프라미스를 만들어도 되지 않나 생각한다.
checkIn: function(attendee) { return new Promise( function checkInPromise(resolve, reject) { attendee.checkIn(); recorder.recordCheckIn(attendee).then( function onRecordCheckInSucceeded(checkInNumber) { attendee.setCheckInNumber(checkInNumber); resolve(checkInNumber); }, function onRecordCheckInFailed(reason) { attendee.undoCheckIn(); reject(reason); }); }); }