언어 선택
durumis AI가 요약한 글
- 어플리케이션 단위 테스트 시 외부 종속성을 제거하는 것이 중요하며, 이를 위해 Prisma Client를 모킹하는 방법을 소개합니다.
- jest-mock-extended 패키지를 사용하여 Prisma Client를 모킹하면 단위 테스트를 효율적으로 수행할 수 있습니다.
- 모킹 후에는 타입 지원으로 단위 테스트 작성이 용이해졌습니다.
어플리케이션 단위 테스트는 격리된 상태에서 진행하는 것이 원칙이므로 테스트 결과에 영향을 줄 수 있는 네트워크 I/O나 데이터베이스등 외부 종속성을 제거하는 것이 좋습니다.
이번에 토이 프로젝트에 Prisma ORM을 사용하게 되어서, 단위 테스트를 위해 Prisma Client를 간단히 모킹하는 방법을 찾아 기록하려고 작성합니다.
jest-mock-extended 패키지 설치
npm install -D jest-mock-extended
Prisma 공식 문서에서도 추천하고 있는 패키지를 위 커맨드로 설치합니다.
Prisma Client 모킹
describe('UserService', () => {
let service: UserService;
let prismaMock: DeepMockProxy;
beforeEach(async () => {
prismaMock = mockDeep();
const module: TestingModule = await Test.createTestingModule({
providers: [
UserService,
{
provide: PrismaService,
useValue: prismaMock,
},
],
}).compile();
service = module.get(UserService);
});
단위 테스트 예시 코드
describe('create', () => {
it('유저 생성에 성공하면 유저 정보를 반환해야한다.', async () => {
// Arrange
const newUser = {
email: 'test@test.com',
password: 'test1234',
};
prismaMock.user.create.mockResolvedValue({
id: 1,
email: 'test@test.com',
password: 'test1234',
});
// Act
const result = await service.create(newUser);
// Assert
expect(result).toEqual({
id: 1,
email: 'test@test.com',
password: 'test1234',
});
});
});
모킹 후에는 타입도 지원되기 때문에, 단위 테스트 작성이 굉장히 편리했습니다.