작성
·
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
안녕하세요 !!! 혹시 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 상태값 체크가 되지 않는 것으로 이해하면 될까요?