Día de Ruru
20230418 TIL 본문
문제점
mypage.controller의 testcode를 짜려고 하는데 아무리 봐도 정말 흠잡을 곳 없이 잘 짰는데 계속 아래의 testcode에서 막힌다. mypagecontroller.MypageService.checkUserById가 0번 호출된다고 결과가 나오는게 이상하다.. 그럴리가!!
expect(mypagecontroller.MypageService.checkUserById).toHaveBeenCalledTimes(1);
해결방안
await mypagecontroller.getUserInfo(mockRequest, mockResponse, mockNext)
1. 테스트코드 세션을 진행했던 멘토님의 슬랙 아이디를 알아내서 디엠으로 여쭤봤더니 지금 코드 자체가 실행이 잘되고 있는지 확인을 해봐야 될 것 같다고 하셨다. 내가 작성한 테스트 코드를 보면 위의 코드에 의해 mycontroller.getUserInfo()가 실행될 것이라는 생각이 들어서 직접 비즈니스 코드에 가서 콘솔로그를 찍어보았다.
getUserInfo = async (req, res, next) => {
try {
console.log("여기에 들어오니?")
const { userId } = res.locals.user;
console.log("그렇다면 여기는..?")
const user = await this.MypageService.checkUserById({ userId });
const userInfo = await this.MypageService.getUserInfo({ user });
res.status(200).json({ user: userInfo });
} catch (err) {
next(err);
}
};
위와 같이 콘솔을 찍어본 결과 여기에 들어오니? 는 찍히는데그렇다면 여기는..? 은 찍히지 않는다!!! 그럼 const { userId } = res.locals.user 여기가 문제구나!!!
2. 그렇다면 내가 testcode에서 작성한 mockdata가 잘못된 것이겠지!! 당장 가서 mockResponse와 mockRequest 를 확인해보았더니 아래와 같이 작성되어 있었다.
let mockRequest = {
body: {},
};
let mockResponse = {
status: jest.fn(),
json: jest.fn(),
locals: {
userId: "test1",
},
};
비즈니스 코드에서 userId를 얻는 곳은 res.locals.user이다. 위의 코드에서는 locals안에 user가 없기 때문에 값을 갖고오지 못하는 것 같다!! 그렇다면 아래와 같이 바꿔줘야겠다
let mockRequest = {
body: {},
};
let mockResponse = {
status: jest.fn(),
json: jest.fn(),
locals: {
user: {
userId: "test1",
},
},
};
위와 같이 작성해주었더니 바로 제대로 작동을 한다!! 이것때문에 진짜 하루를 통으로 날렸는데.... 나는 정말 ... 바보...
알게된 점
코드는 거짓말을 하지 않는다...
'항해99 > TIL' 카테고리의 다른 글
20230502 TIL (0) | 2023.05.03 |
---|---|
20230419 TIL (0) | 2023.04.20 |
20230414 TIL (0) | 2023.04.15 |
20230413 TIL (0) | 2023.04.13 |
20230411 TIL (0) | 2023.04.12 |