describe('User Controller Unit Test', () => {
beforeEach(() => {
jest.resetAllMocks();
(mockUserService = {
createUser: jest.fn(),
loginUser: jest.fn(),
}),
(mockUsersRepository = {
createUser: jest.fn(),
loginUser: jest.fn(),
findByUserEmail: jest.fn(),
}),
(mockPointRepository = {
signUpPoint: jest.fn(),
findUserById: jest.fn(),
}),
(mockReq = { params: {}, body: {} });
(mockRes = {
status: jest.fn().mockReturnThis(),
json: jest.fn().mockReturnThis(),
cookie: jest.fn().mockReturnThis(),
}),
(mockprisma = {
users: {
create: jest.fn(),
findFirst: jest.fn(),
},
point: {
findUserById: jest.fn(),
update: jest.fn(),
},
});
mockNext = jest.fn();
usersController = new UsersController(mockUserService, mockUsersRepository, mockPointRepository);
});
point
, user
테이블에서 정보를 가져와야해서 꽤 여러가지를 의존성 주입을 했다.createdUser
를 mock.body
에 담아주기.createUser
의 리턴 값을 createdUser
로 설정 emailAuth = async (req, res, next) => {
try {
// ...
if (user.role !== 'user') return res.status(400).json({ message: '사용자만 포인트 적립을 받을 수 있습니다.' });
if (userId.money === 1000000) return res.status(400).json({ message: '이미 포인트를 지급하였습니다.' });
await sendMail(email, validationCode);
// ...
const token = await this.usersService.generateToken(email);
if (token) {
await this.pointRepository.signUpPoint(user.userId);
return res.status(201).json({ token });
}
} catch (err) {
next(err);
}
};
momey
가 1,000,000원이 아닐 때만 포인트 지급을 함. => 999000이면 또 지급owner
가 주문 상태를 완료를 해 money
값이 업데이트 되어야하는데 NULL
값이라 오류 발생, 사장님은 포인트 지급X 해야함momey
를 1000000 지급 => 사장님도 포인트 지급이 됨.${}
를 사용 => Middleware를 거쳐 가는 로직이라 원하는 결과 Xmoney
값을 0으로 생성 후 이메일 인증 시 업데이트.mockReturnValue
와 mockResolveValue
리턴값을 저장하는 건 같지만, mockResolveValue
는 비동기 함수에 사용해주기.
nodemailer 사용에 대해 다른 조의 발표를 보고 수정할 점을 많이 느꼈다.
링크를 타고 들어가면 로그인되는 방식 OR 인증번호를 받아 인증하는 API를 따로 만들었어야 했다.
자신만만하게 시작했지만 필수 기능은 구현만 하고, 디테일이 많이 부족했다.
처음으로 '잘 할 수 있을까?'하는 나에 대한 회의감이 들었고, 자신감도 많이 떨어진 한 주 였다.
내 실력을 알고 그릇을 넓혀나가보자!