상세 컨텐츠

본문 제목

[TIL] 2024.02.23 백오피스 프로젝트 시작

[TIL]

by 재호링 2024. 2. 26. 02:25

본문

펫시터 예약 조회

펫시터 예약 수정

펫시터 예약 삭제

 

위 세가지 API를 맡음

 

목표는 3가지 API 기능을 구현하고

TestCode coverage 70프로 이상 완료했을 시

 

dev 브랜치에 커밋하기로했음

 

먼저 3layerd로 작업하는게 기본이며

repository 단을 잠깐 살펴보자

이 코드는 예약 조회 내역 페이지다.

주석처리해둔

        // startDate: {
        //   gte: today.toISOString(), //
        // },

 

부부은 오늘 날짜 이후로 예약날짜를 보여주게되는건데

아직 데이터를입력하지 않아 일단 주석으로 냅뒀다.

 

이런식으로 수정, 삭제 API들까지 만들어주고

테스트코드를 작성했다.

먼저 mockPrisma는 repository 단에서 쓰는 가짜 함수들을 정의해준 것.

이렇게 정의해주는 이유는 외부라이브러리에 대한

"의존성"

을 받지 않기 위해 정의해준 것이다.

항상 가짜가 될 정보를 정의해주고 테스트를 해야한다.

 

오늘 이슈가 있었던 사안은

서비스단에서 데이터를 비교할 때 제대로 접목시키는 법을 몰라 이슈가 있었다.

1-1

위 코드를 보자

비교하려는 comparDates의 데이터 값을 서비스에 있는데로 가져와 쓰려고하니 당연히 오류가 난다.

1-2

1-1에서 보는거와 달리 코드 구성을 바꿧다.

배열형태로 값이 넘어오게해줬고

compareDates에 들어간 값도 서비스에서 가공해준 데이터가 아닌

직접 요청했을때 반환되는 값이 들어가게 그래서 서로 비교가 되게

만들어주었다.

 

이 전에는 내가 사용한 함수에 대한걸 비교한다고 생각했는데,

내가 반환되는 값을 임의로 지정해주고 비교함으로써 테스트를 실행한다고 볼 수 있다.

 

이제 내가 쓴 테스트코드 함수를 복기해보도록하자

const mockReservationRepository = {
  findPossibleDates: jest.fn(),
  findReservationById: jest.fn(),
  updateReservation: jest.fn(),
  deleteReservation: jest.fn(),
};

ReservationService가 의존하는 ReservationRepository 객체의 각 메서드를 가짜로 만들어준 것

 

const reservationService = new ReservationService(mockReservationRepository);

ResrevationService 객체를 MockReservationRepository와 함께 생성한것

 

test('findPossibleDates Method Success', async () => {
  const mockPossibleDates = [
    {
      reservationId: 1,
      startDate: '2024-02-26',
      endDate: '2024-02-27',
      trainers: {
        petCategory: 'dog',
      },
    },
  ];

가짜로(mock) 예약날짜를 생성한것

mockReservationRepository.findPossibleDates.mockReturnValue(mockPossibleDates);

 

mockReservationRepository의 findPossibleDates 를 불러서 테스트를 한번 거침

 

  const possibleDates = await reservationService.findPossibleDates(1);

  const compareDates = [{
    reservationId: 1,
    startDate: '2024-02-26',
    endDate: '2024-02-27',
    petCategory: 'dog',
  }];

  expect(compareDates).toEqual(possibleDates);
  expect(mockReservationRepository.findPossibleDates).toHaveBeenCalledTimes(1);
  expect(mockReservationRepository.findPossibleDates).toHaveBeenCalledWith(1);
});

 

compareDates와 possibleDates가 일치하는지 확인하고

findPossibleDates는 한번 수행되었는지 확인하며

마지막은 내가 인자값을 준게 있었는데 그게 1로 들어왔는지 임의 값을 줘서 확인시켜준것

'[TIL]' 카테고리의 다른 글

[TIL] 2024-02-29 coco-sitter 회고  (0) 2024.03.01
[TIL] 2024.02.27 노드메일러  (1) 2024.02.28
[TIL] 2024.02.23 테스트 코드 멸망  (0) 2024.02.23
[TIL] 2024.02.21 노드 심화 1차 회고  (0) 2024.02.22
[TIL] 2024.02.20 트러블슈팅  (0) 2024.02.21

관련글 더보기