Try using it in your preferred language.

English

  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • 한국어
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar
translation

AI가 번역한 다른 언어 보기

제이의 블로그

NestJS에서 단위 테스트를 위한 Prisma Client 모킹

  • 작성 언어: 한국어
  • 기준국가: 모든 국가 country-flag

언어 선택

  • 한국어
  • English
  • 汉语
  • Español
  • Bahasa Indonesia
  • Português
  • Русский
  • 日本語
  • Deutsch
  • Français
  • Italiano
  • Türkçe
  • Tiếng Việt
  • ไทย
  • Polski
  • Nederlands
  • हिन्दी
  • Magyar

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',
          });
    });
});

모킹 후에는 타입도 지원되기 때문에, 단위 테스트 작성이 굉장히 편리했습니다.

Jay
제이의 블로그
1인분이 목표인 초보 개발자
Jay
물리적 데이터 모델링 물리적 데이터 모델링은 논리적 데이터 모델링을 기반으로 저장 공간 효율성, 오브젝트 파티셔닝, 인덱스 최적화 등 성능 향상에 중점을 둡니다.

2024년 4월 9일

칸반보드 프로젝트 1 개념적 데이터 모델링 관계형 데이터 모델링 연습을 위해 원티드 백엔드 인턴십 과제였던 칸반보드 프로젝트를 다시 구현하며 개념적 데이터 모델링을 진행했습니다. 엔티티 분리, 식별자 정의, 관계 파악 등의 단계를 거치며 카디널리티와 옵셔널리티를 표현했습니다.

2024년 4월 9일

관계형 데이터 모델링 관계형 데이터 모델링은 현실 세계의 정보를 테이블과 데이터로 나누는 과정이며, 요구 사항 분석, 개념적 데이터 모델링, 논리적 데이터 모델링, 물리적 데이터 모델링의 네 단계로 구성됩니다.

2024년 4월 8일

1인 앱 개발은 어떤 테스트를 진행해야 할까? 개발자는 앱 출시 전 테스트 코드를 작성하는데, 시간 효율성을 위해 사람 테스트, 통합 테스트(provider 위주), 유닛 테스트, 인수 및 위젯 테스트 순으로 우선순위를 정했습니다.
Alien Story
Alien Story
Alien Story
Alien Story
Alien Story

2024년 5월 16일

글 테스트 두루미스 AI의 미리보기가 없습니다.
안민수
안민수
안민수
안민수

2024년 4월 29일

[비전공, 개발자로 살아남기] 16. 신입 개발자 포트폴리오 작성 꿀팁 비전공자 개발자 취업 준비를 위한 포트폴리오 작성 시, 기술뿐만 아니라 개발한 서비스나 기능을 명확하게 설명하는 것이 중요합니다. 프로젝트 경험을 기술할 때, 사용한 기술뿐만 아니라 개발한 기능과 담당 업무를 구체적으로 작성하여 어떤 서비스를 개발했는지 명확하게 보여주는 것이 좋습니다.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024년 4월 3일

[이펙티브 자바] 아이템 6. 불필요한 객체 생성을 피하라 자바에서 불필요한 객체 생성을 최소화하여 성능을 향상시키는 방법에 대해 설명합니다. 문자열, 부울, 정규 표현식, 뷰 객체, 오토 박싱 등 다양한 예시와 함께 객체 재사용의 중요성을 강조합니다. 특히 방어적 복사가 필요한 경우 객체 재사용으로 인한 문제점을 주의해야 합니다.
제이온
제이온
제이온
제이온

2024년 4월 28일

[비전공, 개발자로 살아남기] 14. 신입 개발자 자주 묻는 기술면접 내용 요약 신입 개발자 면접에서 자주 나오는 기술 질문과 답변을 정리했습니다. 메모리 영역, 자료구조, 데이터베이스, 프로그래밍 패러다임, 페이지 교체 알고리즘, 프로세스와 스레드, OSI 7 계층, TCP와 UDP 등 다양한 주제를 다룹니다.
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

2024년 4월 3일

[오브젝트] 1장. 객체, 설계 소프트웨어 개발에서 변경 용이성과 의사소통은 중요하며, 이를 위해 객체 지향 설계를 적용해야 합니다. 객체는 자신의 데이터를 스스로 관리하는 자율적인 존재이며, 객체 간의 의존성을 적절하게 관리하는 것이 훌륭한 설계입니다.
제이온
제이온
제이온
제이온

2024년 4월 28일