개발일지
개발일지 52일차
index.ys
2023. 5. 16. 03:26
jest로 테스트 코드 작성하기
const FollowerController = require("../../../controllers/follower.controller");
mock함수 정의
//service계층에서 사용하는 메소드 가짜(mock) 함수 정의
let mockFollowersService = {
getFollowerAll: jest.fn(),
postFollower: jest.fn(),
deleteFollower: jest.fn()
}
req로 전달받는 값 mock객체 정의
let mockRequest = {
body: jest.fn(),
};
res로 전달받는 값 mock객체 정의
let mockResponse = {
status: jest.fn(),
json: jest.fn(),
};
실제 controller계층 선언
let followerController = new FollowerController();
followerController.followerService = mockFollowersService;
유닛 테스트 선언
describe("팔로워 컨트롤러 계층 유닛 테스트", () => {
// 각 test가 실행되기 전에 실행됩니다.
beforeEach(() => {
jest.resetAllMocks(); // 모든 Mock을 초기화합니다.
// mockResponse.status의 경우 메서드 체이닝으로 인해 반환값이 Response(자신: this)로 설정되어야합니다.
mockResponse.status = jest.fn(() => {
return mockResponse;
});
});
1. 팔로워 컨트롤러 postFollower 메소드 성공 테스트
test("팔로워 컨트롤러 postFollower 메소드 성공 테스트", async () => {
//임의의 Body 값 할당
const postFollowerRequestBody = {
user_id: 1
};
//mockbody에 임의의 body값 할당
mockRequest.body = postFollowerRequestBody;
//요청이 성공했을때 응답 값 선언
const postFollowerReturnValue = { "message": "팔로워 추가 완료" };
//mockFollwersService계층의 postFollower 메소드를 실행 했을때, postFollwerReturnValue 실행
mockFollowersService.postFollower = jest.fn(() => postFollowerReturnValue);
//followerController.postFollower 실행시 mockReq, mockRes선언
await followerController.postFollower(mockRequest, mockResponse);
//mockFollowersService.postFollower 요청 횟수
expect(mockFollowersService.postFollower).toHaveBeenCalledTimes(1);
//mockFollowersService.postFollower 호출시 요청하는 값
expect(mockFollowersService.postFollower).toHaveBeenCalledWith(
postFollowerRequestBody.user_id,
);
//mockFollowersService.postFollower 요청 횟수
expect(mockResponse.status).toHaveBeenCalledTimes(1);
//mockFollowersService.postFollower 호출 횟수
expect(mockResponse.status).toHaveBeenCalledWith(200);
//mockFollowersService.postFollower 응답 값
expect(mockResponse.json).toHaveBeenCalledWith({
"message": "팔로워 추가 완료"
});
});
2. 팔로워 컨트롤러 getFollwerAll 메소드 성공 테스트
test("팔로워 컨트롤러 getFollwerAll 메소드 성공 테스트", async () => {
//
const getFollwerAllReturnValue = {
follow: [
{
follow_id: 1,
user_id: 1,
follower_name: "kim_cool",
createdAt: "2022-07-25T07:45:56.000Z",
updatedAt: "2022-07-25T07:52:09.000Z",
},
{
follow_id: 2,
user_id: 1,
follower_name: "kim_cool",
createdAt: "2022-07-25T07:45:56.000Z",
updatedAt: "2022-07-25T07:52:09.000Z",
},
]
}
const getFollwerAllRequestBody = {
user_id: 1,
};
mockRequest.body = getFollwerAllRequestBody
mockFollowersService.getFollowerAll = jest.fn(
() => getFollwerAllReturnValue
);
await followerController.getFollowerAll(mockRequest, mockResponse);
expect(mockFollowersService.getFollowerAll).toHaveBeenCalledTimes(1);
expect(mockResponse.status).toHaveBeenCalledTimes(1);
expect(mockResponse.status).toHaveBeenCalledWith(200);
expect(mockResponse.json).toHaveBeenCalledWith({ follow: getFollwerAllReturnValue });
});
3. 팔로워 컨트롤러 deleteFollower 메소드 성공 테스트
test("팔로워 컨트롤러 deleteFollower 메소드 성공 테스트", async () => {
const deleteFollowerRequestBody = {
user_id: 1
};
mockRequest.body = deleteFollowerRequestBody
const deleteFollowerReturnValue = { "message": "팔로우 취소 완료" };
mockFollowersService.deleteFollower = jest.fn(() => deleteFollowerReturnValue);
await followerController.deleteFollower(mockRequest, mockResponse);
expect(mockFollowersService.deleteFollower).toHaveBeenCalledTimes(1);
expect(mockFollowersService.deleteFollower).toHaveBeenCalledWith(
deleteFollowerRequestBody.user_id
);
expect(mockResponse.status).toHaveBeenCalledTimes(1);
expect(mockResponse.status).toHaveBeenCalledWith(200);
expect(mockResponse.json).toHaveBeenCalledWith({
"message": "팔로우 취소 완료",
});
});