로직을 바꾸게 된 이유 with Unique true

·2022년 8월 6일
0

todo

목록 보기
2/5

현재 작업중인 투두리스트의 유저 테이블의 email 컬럼에는 유니크 옵션이 들어가있다.

그래서 회원가입을 할 때 아래와 같은 로직으로 짜놨다.

변경 전 회원가입 로직

중복 검증을 별도로 진행하지 않고 유니크 제약조건에 의해 에러가 발생하며 롤백되는 것을 사용한 것이였는데
이게 테스트코드를 짜면서 문제가 발생했다(....)

현재의 데이터베이스는 아무런 기능이 없는 Mocking DB를 사용하기 때문에
유니크 제약조건을 어떻게 구현을 해야하는지 감을 잡지 못했다(....)

단일 DB를 쓰고 있었고, 추가적으로 뭔가 사용하고 싶지 않았기에 이걸 어떻게 하는게 좋을까 고민하다가.....

그냥 중복 검증 로직을 넣어버리는 것으로 해결했다^^;;

변경 후 회원가입 로직

그래서 테스트 코드는 아래처럼 짰고, 뭔가 회피를 한 것 같다는 생각도 들어서 아쉬운 마음도 있다.

메모리 DB를 추가로 사용해서 트랜잭션을 구현하는 방법도 있다고 듣긴 했는데
이 부분에 대해서는 좀 알아보고 나중에 도입을 해봐야할 것 같다.

테스트 코드

 describe('create', () => {
    it('유저 회원가입 성공', async () => {
      const userRepositorySpySave = jest.spyOn(userRepository, 'save');
      const userRepositorySpyFindOne = jest.spyOn(userRepository, 'findOne');

      userRepository.findOne.mockResolvedValue(false);
      userRepository.save.mockRejectedValue(save);
      userRepository.save.mockReturnValue(save);

      const result = await userService.signUp(createUserDto);

      expect(result).toEqual(save);
      expect(userRepositorySpySave).toHaveBeenCalledTimes(1);
      expect(userRepositorySpyFindOne).toHaveBeenCalledTimes(1);
    });
}    
profile
물류 서비스 Backend Software Developer

0개의 댓글