더북(TheBook)

이 책을 쓰는 현재, 재스민으로는 비동기 코드에서 강제로 실패하게 할 방법이 마땅치 않다. 어떤 개발자가 명시적인 fail 함수를 재스민에 추가한 바 있지만(https://github.com/pivotal/jasmine/commit/b1344d5c73c5e01a07e1ea435be3ed980f6db9de), 아직 정식 배포 버전에 포함된 건 아니다. onPromiseRejected 분기 코드의 기대식이 다소 우스꽝스럽게 보이긴 해도 더없이 유익한 에러 메시지를 재스민 결과창에 표시할 것이다.

귀결/버림 모두 끝에서 done()을 호출하는데, 재스민은 이런 식으로 비동기 코드 테스팅을 지원한다. done()은 예제 6-4 첫 번째 줄에서 인자로 받은 함수다. 인자로 준 함수명이니 이름을 달리 지어도 상관없지만, 어쨌든 비동기 처리가 다 끝나면 반드시 이 함수를 호출해야 한다. 그렇지 않으면 재스민에서 타임아웃(timeout) 에러가 난다.

파라미터와 두 호출부에서 done()을 생략하면 재스민은 비동기 작업이 미처 다 끝나기도 전에 테스트를 종료한다. 따라서 성공할 테스트도 귀결/버림 분기 코드 모두 제때 결과에 반영되지 못한다! 예제 6-4에서 done을 들어내고 테스트하면 첫 번째 기대식은 묻지도 따지지도 않고 테스트는 그냥 성공할 것이다! 단위 테스트를 성공시키는 코드를 작성하기 전에 실패하는 단위 테스트를 먼저 작성하는 일이 왜 중요한지 여실히 보여주는 대목이다. 여러분이 의도한 방향으로 테스트가 실행되고 있는지 디버거로 확인하는 습관을 꼭 길들이자.

TIP

비동기 코드를 테스트할 때는 항상 재스민의 done()을 써라.

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