About Jest

이승준·2023년 11월 14일
0

Facebook에서 개발한 테스팅 라이브러리

Testing "framework"

  • 페이스북에서는 Jest를 단순한 테스팅 라이브러리가 아닌 “테스팅 프레임워크”라고 부르는 만큼 기존 자바스크립트 테스팅 라이브러리와는 차별점이 있습니다. Jest 이전에는 자바스크립트 코드를 테스트하라면 여러 가지 테스팅 라이브러리를 조합해서 사용해야 했는데요.

  • 예를 들어, Mocha나 Jasmin을 Test Runner로 사용하고, Chai나 Expect와 같은 Test Matcher를 사용했으며, 또한 Sinon과 Testdouble 같은 Test Mock 라이브러리도 필요했었습니다. 이 라이브러리들은 굉장히 유사하지만 살짝씩 다른 API를 가지고 있었기 때문에, 여러 프로젝트에 걸쳐서 일하는 자바스크립트 개발자들에게 혼란을 주기도 했는데요. 하지만 이제는 Jest는 라이브러리 하나만 설치하면, Test Runner와 Test Matcher 그리고 Test Mock까지 몽땅 해결이 됩니다.

unit Test

  • 유닛 테스트는 코드의 특정 부분이 의도한 대로 작동하는지 확인하고, 각각의 기능이 독립적으로 정상적으로 동작하는지를 검증합니다.

e2e Test

  • 실제 사용자의 관점에서 애플리케이션을 테스트하며, 모든 컴포넌트 및 시스템 간의 통합을 확인합니다. 전체 시스템이 예상대로 동작하는지 확인하는 데 중점을 둡니다.

실습

beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [MoviesService],
    }).compile();

    service = module.get<MoviesService>(MoviesService);
  });
  • beforeEach나 beforeAll 또는 after등의 방법으로 사전설정, 사후설정 등을 할 수 있다.
describe('getAll()', () => {
    it('should be array', () => {
      const result = service.getAll();

      expect(result).toBeInstanceOf(Array);
    });
  });
  • describe로 테스트묶음을 정의하고, it에 실제 테스트 로직을 구현한다.
  • expect로 참과 거짓을 판별해 테스트를 판정한다.
describe('/movies', () => {
    it('/movies (GET)', () => {
      return request(app.getHttpServer()).get('/movies').expect(200).expect([]);
    });

    it('/movies (POST)', () => {
      return request(app.getHttpServer())
        .post('/movies')
        .send({
          title: '남자가 사랑할 때',
          year: 2023,
          genres: ['test'],
        })
        .expect(201);
    });
  • e2e 테스트에서는 실제로 요청을 보내 예측한대로 동작하는 지 확인합니다.

Jest로 비동기 로직테스트와 실제로 프로젝트를 구현하며 테스트 자동화를 구현해보며...

참조 https://www.daleseo.com/jest-basic/#google_vignette

1개의 댓글

comment-user-thumbnail
2023년 11월 14일

개발자로서 배울 점이 많은 글이었습니다. 감사합니다.

답글 달기