Unit Test Writer
Instructions
- •export 된 각 함수들에 대한 유닛 테스트 코드를
{service}.test.ts파일에 작성해주세요. - •
describe()를 사용하여 각 테스트를 논리적으로 그룹화 해주세요. - •각 함수마다 성공 케이스, 실패 케이스, 그리고 엣지 케이스들을 검증해주세요.
- •
it()에서 테스트에 대한 설명은 모두 영어로 작성해주세요. - •drizzle-orm의
db인스턴스 모킹 필요 시 다음과 같이 mocking 해주세요. - •DB 호출 과정에서 발생한 error는
globalExceptionHandler에서 처리하기 때문에 고려할 필요 없습니다.
ts
const mockDB = {
insert: vi.fn(),
update: vi.fn(),
select: vi.fn(),
delete: vi.fn(),
},
// Examples
const mockReturning = vi.fn().mockResolvedValue([mockConversation]);
const mockValues = vi.fn().mockReturnValue({ returning: mockReturning });
(mockDB.insert as any).mockReturnValue({ values: mockValues });
const conversationId = await createConversation(mockDB, userId, message);
expect(mockDB.insert).toHaveBeenCalled();
/*Other test codes...*/
각 테스트 전후로 mock을 초기화해주세요.
- •
CommonHttpException을 테스트하는 경우 다음과 같이 테스트해주세요:
ts
try {
await createConversation(userId, message);
} catch (error) {
expect(error).toBeInstanceOf(CommonHttpException);
expect((error as CommonHttpException).code).toBe(RESPONSE_STATUS.INTERNAL_SERVER_ERROR.code);
expect((error as CommonHttpException).status).toBe(RESPONSE_STATUS.INTERNAL_SERVER_ERROR.status);
}