인프런 커뮤니티 질문&답변

가보자!!님의 프로필 이미지
가보자!!

작성한 질문수

테스트주도개발(TDD)로 만드는 NodeJS API 서버

슈퍼테스트(superTest) 2

슈퍼 테스트2 강의 질문입니다

작성

·

337

0

 

describe('GET /users는', () => {
    it('user리스트를 limit만큼 가져왔다', (done) => {
        request(app)
            .get('/users')
            .end((err, res) => {
                console.log(res.body)
                done() // 우리가 만든 API서버는 비동기로 동작한다. 그래서 비동기에 대한 처리로 콜백함수를 호출해야 한다??
            })
    })
})

강사님께서 콜백함수 done()을 호출하는 부분에서 다음과 같이 말하셨습니다..."우리가 만든 API서버는 비동기로 동작한다. 그래서 비동기에 대한 처리를 해야한다"

그런데 done()이라는 콜백함수를 호출하는 것이 어떤의미에서 비동기에 대한 처린인지 이해가 가지않아 질문을 남깁니다.

답변 1

0

김정환님의 프로필 이미지
김정환
지식공유자

모카의 it 함수는 두번 째인자로 테스트할 로직을 함수 형태로 정의하게 되어있습니다.

it('테스트 설명', function 테스트_본문() {
  // 여기에 동기 로직을 테스트합니다.
  // 모카는 여기서 로직이 끝나는 것을 압니다. 테스트 종료 처리를 합니다.
});

이런 구조이죠. 동기 코드를 테스트한다면 그냥 순서대로 작성하면 됩니다.

반변 비동기 코드를 테스트한다면 언제 테스트할 코드가 완료되었는지 알 수 없을거에요.

it('테스트 설명', function 테스트_본문() {
  // 여기에 비동기 로직을 테스트합니다.
  // 모카는 로직이 언제 완료될지 아직 모릅니다. 
  // 예: api 서버가 1초 후일지 2초후일지 언제 응답할지 모르니깐. 
  // 모카에서 로직이 완료되었다는 것을 알려줄 방법이 필요합니다.
});

비동기 로직은 언제 완료될지 알수 없기 때문입니다. 예를 들어 api 서버를 테스트할 때 1초 후에 응답을 줄지 2초후에 응답을 줄지 모르기 때문입니다.

그래서 모카에게 '로직이 완료되었어' 라고 알려주 방법이 필요한데 그게 테스트_본문 함수의 done 인자입니다. 테스트 코드에서 done()을 호출하면 모카는 '아 이 로직이 완료되었구나'라고 판단하고 테스트 케이스가 실패인지 성공인지 판단할 수 있을 것입니다.

 

가보자!!님의 프로필 이미지
가보자!!

작성한 질문수

질문하기