오늘은 실제 Board.controllerd 에 작성한 코드들에 대해 테스트코드를 작성해보았다.
먼저 사용할 서비스들을 토대로 모킹서비스 객체를 생성해주었다

그 다음 실제로 사용했던 Dto를 정의해준다

그 다음 의존성 주입을 해주고 테스트 전 임시데이터를 초기화 하는 작업을 진행해주면 된다

그다음 테스트하고자 하는 코드를 작성하면된다
이와 연관된 문법들은 jest 공식홈페이지를 참조하면서 진행하면 많이 도움이된다
// 테스트 후 임시데이터를 초기화 하는 작업
afterAll(async () => {
expect(controller).toBeDefined();
expect(service).toBeDefined();
})
describe('create', ()=> {
it('should create board', async()=> {
//Given
const createResult = {
ownerId: 1,
name: "testcode",
background_color: '#FF0000',
id: 1,
createdAt: "2024-07-13T08:29:27.735Z",
updatedAT: "2024-07-13T08:29:27.735Z",
deletedAt: null
}
const req = {user: {id: 1}};
//모킹한 서비스의 create 를 실행하면 createResult 값을 리턴하게 한다는 의미
mockBoardServcie.create.mockResolvedValue(createResult)
//When
//실제로 컨트롤러의 메서드를 동작시키는 부분
//컨트롤러 메서드의 매개변수로 req, creatBoardDto 를 사용
//req는 사용자가 보드의 owner 인지 확인하기 위한 용도
//실제 컨트롤러와 매개변수 순, 조건이 동일해야함
const response = await controller.create(createBoardDto,req)
//Then
const expectedResult = {data: createResult, message:MESSAGES_CONSTANT.BOARD.CREATE_BOARD.SUCCEED, statusCode:HttpStatus.CREATED }
//실제 테스트를 진행하는 파트
//컨트롤러 메서드가 1바퀴만 돌았는지 확인하기(로직이 두번이상 실행되면 문제있음 ㅇㅇ)
//mock fn에대해 테스트를한다/
expect(mockBoardServcie.create).toHaveBeenCalledTimes(1)
//컨트롤러의 실체 create 메서드의 결과가 createResult 와 같은지 확인
expect(response).toEqual(expectedResult);
//tobe = obj를 비교할때 이걸사용하면 서로다른 obj만 값이같아도 저장된 주소가 다르기때문에
//toEqual = obj 의 실제 속에 key,Value 를 비교함
//컨트롤러에서 서비스의 create 메서드를 사용할때 주어진 매개변수를 사용하는지 확인
// 실제 보드컨트롤러 30번재줄과 비교해보면 이해하기 쉽습니다.
expect(mockBoardServcie.create).toHaveBeenCalledWith(req.user.id,createBoardDto)
//113에서 실패한 이유는 실제로 리턴값이 다르기때문(스테이터스 코드 , 리턴메세지)
// createResult 는 서비스가 리턴하는거고 expectedResult 는 컨트롤러의 리턴값
});
})
'NestJs' 카테고리의 다른 글
NestJS EventEmitter 와 실제 사용 (2) | 2025.06.08 |
---|---|
CDN 이란?, S3 와 CDN 을 연결하기 (0) | 2024.08.07 |
NestJs 환경에서 faker (더미데이터 w/ seeder) 사용하기 (0) | 2024.07.19 |
SSE (0) | 2024.07.19 |
service.spec.ts 단위테스트 작성해보기(트랜잭션) in jest, nest (0) | 2024.07.16 |