Jest 전역 환경

@bbearcookie · May 20, 2023 · 4 min read

테스트 파일 안에서 Jest 는 테스트를 위한 여러 유용한 메소드와 객체를 전역 환경에 추가한다.

자세한 내용은 공식 문서에서 확인할 수 있고 여기서는 유용하다고 생각되는 몇 가지의 기능을 정리해보고자 한다.

영역 묶기

연관이 있는 test 함수는 같은 블록에 존재하는게 관리하기 좋다.
describe 를 사용하면 여러 test 함수를 하나의 블록으로 묶을 수 있다.

테스트 전/후 처리

테스트 코드를 작성하다 보면 여러 테스트 함수에서 공통적으로 필요한 로직이 있다거나 테스트 전과 후에 초기화해줘야 하는 작업이 존재하는 경우가 생길 수 있다.

Jest 는 이런 경우에 사용할 수 있는 기능을 제공한다.

beforeAll / beforeEach

  • beforeAll: 같은 영역에 있는 test 함수를 실행하기 전에 한 번 호출된다.
  • beforeEach: 같은 영역에 있는 각 test 함수를 실행할 때마다 호출된다.

afterAll / afterEach

  • afterAll: 같은 영역에 있는 test 함수를 모두 종료한 뒤에 한 번 호출된다.
  • afterEach: 같은 영역에 있는 각 test 함수를 종료할 때마다 호출된다.

실행 순서

beforeAll(() => console.log('outside beforeAll'));
afterAll(() => console.log('outside afterAll'));

describe('전/후처리 테스트', () => {
  beforeAll(() => console.log('inside beforeAll'));
  afterAll(() => console.log('inside afterAll'));

  describe('Each 테스트', () => {
    beforeEach(() => console.log('Each'));

    test('Each test', () => {
      expect(true).toBeTruthy();
    });
  });

  test('one test', () => {
    expect(true).toBeTruthy();
  });
  test('one test', () => {
    expect(true).toBeTruthy();
  });
  test('one test', () => {
    expect(true).toBeTruthy();
  });
  test('one test', () => {
    expect(true).toBeTruthy();
  });
});
outside beforeAll
inside beforeAll
Each
inside afterAll
outside afterAll

beforeAll 은 외부 영역일수록 먼저 실행하고, afterAll 은 내부 영역일수록 먼저 실행한다는 점을 확인할 수 있다.

또한, beforeEach() 가 실행된 영역의 바깥 부분에 존재하는 test 함수에 대해서는 Each 를 출력하고 않는다는 점을 확인할 수 있다.

테스트 코드 부분 실행

테스트 코드의 특정 부분에서 문제가 발생할 때 다른 test 함수 때문에 발생하는 문제인지, 혹은 해당 test 함수 자체에 문제가 있는지 알고싶을 경우가 있다.

이런 경우에는 describetestskip 이나 only 를 붙여서 사용한다.

  • skip: 테스트 과정에서 해당 test 함수를 무시하고 넘어간다.
  • only: 테스트 과정에서 해당 test 함수만 실행한다.

예시 코드

describe('skip 테스트', () => {
  test('진행할 테스트', () => {
    expect(true).toBeTruthy();
  });
  test.skip('스킵할 테스트', () => { // 이 테스트는 무시하고 넘어가게 된다.
    expect(true).toBeTruthy();
  });
  test('진행할 테스트2', () => {
    expect(true).toBeTruthy();
  });
});

참고 자료

Globals - Jest
Jest로 테스트 전/후 처리하기 (DaleSeo)
Jest 강좌 #4 테스트 전후 작업 - 자바스크립트 테스트 프레임워크 (코딩앙마)

@bbearcookie
Frontend Developer