Jest

박찬효·2022년 10월 23일
0

Jest

Nestjs에서는 javascript 테스트 프레임워크인 jest를 기본 테스트 프레임워크로 지원하고 있습니다. 테스트 코드의 모양이 직관적이고 문서화가 잘되어 있어 요즘 많이 활용되고 있는 프레임워크로서, 여러 가지 상황을 설정하고 그상황에 맞는 로직과 결과가 나오는지 자동으로 테스트 해줍니다.

jest 이전에는 여러가지 테스트 라이브러리를 섞어 사용했지만, Mock 함수를 만들기 위해 Sinon과 TestDouble같은 Test Mock 라이브러리를 추가로 설치하여 사용하는 것이 그예입니다. 그러나 jest를 사용하면 거의 모든 기능을 한 번에 지원하기 때문에 아주 효과적인 Test Framewokr라고 생각합니다.

Mocking ??

Mocking은 단위 테스트를 작성할 때 해당 코드가 의존하는 부분을 가짜(mock)으로 대체하는 기법을 말합니다. 일반적으로 테스트 하려는 코드가 의존하는 부분을 직접 생성하기가 너무 부담스러운 경우 mocking이 많이 사용됩니다.

Mocking은 실제 객체인 척하는 가짜 객체를 생성하는 매커니즘을 제공합니다. 또한 테스트가 실행되는 동안 Mocking 객체가 호출되거나, 어떤 아웃풋을 반환하는지 등을 기억하기에 어떻게 사용되는 지 검증이 가능합니다. 따라서 Mocking을 이용하면 구체적으로 구현해야 하는 실제 객체 사용보다 훨씬 빠르고, 동일한 결과를 내는 테스트를 작성 가능합니다.

Unit Test

class MockAppService {
  getHello(): string {
    return '나는 가짜다!!!';
  }
}

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [
        {
          provide: AppService,
          useClass: MockAppService,
        },
      ],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('getHello', () => {
    it('이 테이스의 검증 결과는 Hello World를 리턴해야함!!!', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
  • describe()는 여러개의 it()을 하나의 TEST 작업단위로 묶어주는 API라고 볼수 있습니다. 하나의 작은 TestCase를 it()라고 한다면 describe()는 여러개의 TestCase를 하나의 그룹으로 묶어주는 역할을 합니다.

  • expect()를 활용해 테스트 기대값과 실제 결과를 비교하여 TestCase의 성공여부를 결정합니다.

  • tobe()는 정확한 값이 일치하는지 확인합니다.

profile
개발자가 되기 위한 1인

0개의 댓글