-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
mockReturnValue 질문
22.04.26 02:36 작성 조회수 161
0
db 에러가 발생하면 next(error) 호출부분 질문드립니다.
User.findOne부분을 mocking해서 reject를 반환하게 해서 에러처리하는 부분을 테스트하는것으로 이해를 하고 있습니다.
user 컨트롤러에서 findOne이 reject를 반환하니,
User.findOne({where: {id : req.user.id}});
이 controller 코드에서 req.user.id가 필요없다고 생각하여 req 객체를 빈 객체로 만들고 테스트를 진행하니, req.user가 undefined라는 에러가 나오며 테스트가 실패하였습니다.
이 부분을 혹시 User.findOne 부분을 mocking 하더라도 findOne 함수 실행을 끝까지 하고 reject를 반환한다고 이해해도 되는것일까요?
test("db 에러 발생하면 next(error)호출", async () => {
const error = "error for test";
User.findOne.mockReturnValue(Promise.reject(error));
await addFollowing(req, res, next);
// req = {}로 넣어도 되지 않을까?
expect(next).toBeCalledWith(error);
});
//////////////////////////////
exports.addFollowing = async (req, res, next) => {
try {
//질문대상인 User.findOne
const user = await User.findOne({ where: { id: req.user.id } }); // req.user가 :id 사람을 팔로잉 한다.
if (user) {
await user.addFollowing(parseInt(req.params.id, 10));
res.send("success");
} else {
res.status(404).send("no user");
}
} catch (error) {
console.error(error);
next(error);
}
};
답변을 작성해보세요.
0
조현영
지식공유자2022.04.26
User.findOne({where: {id : req.user.id}});
코드의 실행 순서를 잘 생각해보세요.
req.user.id 값에 대한 접근이 findOne 함수 호출보다 먼저 일어납니다.
req.user.id에서 에러가 발생하니 findOne은 호출조차 되지 않습니다.
답변 1