인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

사리곰탕님의 프로필 이미지
사리곰탕

작성한 질문수

따라하며 배우는 TDD 개발 [2023.11 업데이트]

updateProduct 단위 테스트 작성 (2)

expect(res.statusCode).toBe(500);

작성

·

209

0

it('should handle errors', async () => {
    const errorMessage = {message: 'errors'};
    const rejectedPromise = Promise.reject(errorMessage);
    Product.findByIdAndUpdate.mockReturnValue(rejectedPromise);
    await productController.updateProduct(req, res, next);
    expect(next).toHaveBeenCalledWith(errorMessage);
    // expect(res.statusCode).toBe(500);  // Received: 200
  });

server.js 에 작성된 오류 처리기에서는 500으로 처리하도록 되어 있는데, 위와 같이 500으로 처리되는지 확인해보면 200이 response되고 있습니다. next에 대한 테스트는 의도대로 되는 것으로 보아서 테스트는 문제가 없는 것 같은데, 왜 express 오류처리기의 response코드 500이 아닌 200으로 처리되는지 궁금합니다.

답변 1

0

John Ahn님의 프로필 이미지
John Ahn
지식공유자

안녕하세요 !!! 혹시 updateProduct 메소드에 직접적으로 500을 리턴을 해주시는건가요 ? 
아니면 try catch 문에서 next(error)로 정의해주셨기 때문에 res.statusCode는 직접적으로 작성해주시지 않았다면 500으로 나오지 않는답니다.    단위테스트 말고 통합테스트를 하면 실제로 500에러가 일어나지만 단위테스트에서는 수동으로 작성해준것과 같은지만 테스트 해주고 있습니다 ~ ! 

사리곰탕님의 프로필 이미지
사리곰탕
질문자

강의에서와 동일하게 updateProduct의 try catch에서는 next(error); 만 호출해주고 있습니다.

그럼 productController.updateProduct(req, res, next)의 res와 server.js에서 구현한 오류처리기에서 res.status(500).send(); 할때의 res가 다른 객체라서 ,

위 주석 처리된 단위테스트의 500 상태값 체크가 되지 않는 것으로 이해하면 될까요?

사리곰탕님의 프로필 이미지
사리곰탕

작성한 질문수

질문하기