Testing/Jest

[Jest] 테스팅도구 - Jest란?

닉네임없음ㅎ 2024. 12. 1. 16:31

Jest

Jest는 자바스크립트 및 타입스크립트 애플리케이션을 테스트하기 위해 설계된 테스트 프레임워크이다.
Facebook에서 개발한 Jest는 특히 리액트에서 시작해 점차 nodeJs, Vuejs, angular, NestJS 등 다양한 환경에서 사용되고 있다고 한다 ! 

*Jest의 기본 구성요소 

1.  테스트  suite

describe('UserService', () => {
    // 테스트 케이스가 여기에 작성됩니다.
});


=> Jest에서는 describe 블록으로 테스트 스위트를 정의함.


2. 테스트 케이스 

it('should return the correct user', () => {
    expect(userService.findUserById(1)).toEqual({ id: 1, name: 'John' });
});


=> 기능이나 동작을 검증하는 단위 테스트로 it 또는 test로 정의함 

3. Assertion

expect(sum(1, 2)).toBe(3);


=> 특정 조건이 충족되는지 확인하는 단계로 Jest에서는 expect를 사용해 작성함. 

4. Mock 함수

const mockFn = jest.fn();
mockFn();
expect(mockFn).toHaveBeenCalled();


=> 외부 의존성을 대체하거나 특정 함수의 호출 여부를 확인할 때 사용하는 가짜 함수임. 


*테스트 파일


NestJS 프로젝트를 생성하면 기본적으로 spec 이라는 이름이 들어간 파일을 Jest의 테스트 파일로 읽음. 


예를들어 nest g resource 명령어로 모듈을 생성하면 이렇게 기본 파일구조가 생성되는데 
이때 spec 이라는 단어가 들어간 테스트 파일들도 함께 생성된다. 


 

*spec.ts 파일의 기본 구조

import { Test, TestingModule } from '@nestjs/testing'; // Jest와 NestJS의 테스트 모듈
import { ExampleService } from './example.service'; // 테스트 대상 서비스

describe('ExampleService', () => {
  let service: ExampleService;

  // 테스트 전 초기화 작업을 수행
  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [ExampleService],
    }).compile();

    service = module.get<ExampleService>(ExampleService);
  });

  // 각 테스트 후 정리 작업
  afterEach(() => {
    jest.clearAllMocks(); // Jest의 모든 mock 초기화
  });

  // 개별 테스트 작성
  it('should be defined', () => {
    expect(service).toBeDefined(); // ExampleService가 올바르게 정의되어 있는지 확인
  });

  it('should return the correct value from exampleMethod', () => {
    const input = 10;
    const expectedOutput = 20;

    // 실제 메서드 호출
    const result = service.exampleMethod(input);

    // 기대 값 검증
    expect(result).toBe(expectedOutput);
  });

  it('should throw an error when invalid input is provided', () => {
    const invalidInput = -1;

    // 에러 발생 여부 확인
    expect(() => service.exampleMethod(invalidInput)).toThrow(Error);
  });
});

 

 


 

*테스트 실행

nestjs로 프로젝트를 생성하면 기본적으로 jest가 포함되어 있기 때문에 
pnpm test 로 테스트를 실행해볼수 있다. 


또한 --coverage 를 붙이면 coverage 정보또한 확인할 수 있다. 

커버리지란 소프트웨어 테스트에서 작성된 테스트코드가 애플리케이션의 코드베이스를 얼마나 실행했는지를 측정하는 지표이다. 

 


즉, 테스트가 애플리케이션 코드에서 어떤 부분을 실행했고, 어떤 부분은 실행하지 않았는지를 보여준다.