본문 바로가기
Testing/Jest

[Jest] 테스트 전(before)/후(after) 처리하기

by 썸머워즈 2022. 9. 27.
반응형

전(before)/후(after) 처리

테스트를 작성하다 보면 모든 테스트 함수에서 공통적으로 필요한 공통 로직이 필요할 때가 있는데,

그때 전후 처리인 before/after 메서드를 사용할 수 있다.

기본적인 건 [Jest] Jest 기초 문법에서 다뤘었는데, 전후처리에 대해 좀 더 알아보자.

beforeEach() / afterEach()

const globalDatabase = makeGlobalDatabase();

function cleanUpDatabase(db) {
  db.cleanUp();
}

afterEach(() => {
  cleanUpDatabase(globalDatabase);
});

beforeEach(() => {
  return globalDatabase.insert({ testData: "foo" });
});

test("can find things", () => {
  return globalDatabase.find("thing", {}, (results) => {
    expect(results.length).toBeGreaterThan(0);
  });
});

test("can insert a thing", () => {
  return globalDatabase.insert("thing", makeThing(), (response) => {
    expect(response.success).toBeTruthy();
  });
});

beforeEach는 각 테스트가 실행되기 전에 실행되는 전처리기이다.

위 예제를 보면 각 test()가 실행하기 전에 beforeEach가 실행되며 각 테스트 케이스가 실행되기 전에 데이터를 삽입하는 로직이 실행된다.

 

afterEach는 각 테스트가 실행된 후에 실행되는 후처리기이다.

위 예제를 보면 각 test()가 실행한 후에는 beforeEach에서 사용한 데이터를 초기화시켜주는 역할을 한다.

자주 사용하는 메서드는 아니겠지만 일부 임시 상태를 정리하는데 유용하게 사용된다.

 

(참고: https://jestjs.io/docs/api#beforeeachfn-timeout / https://jestjs.io/docs/api#aftereachfn-timeout)

 

beforeAll() / afterAll()

beforeAll()과 afterAll()은 beforeEach()와 afterEach()를 보면 알겠지만 굳이 매번 실행할 필요 없이 단 한 번만 실행해놓고 테스트를 작성해도 상관없을 때 사용된다.

const globalDatabase = makeGlobalDatabase();

function cleanUpDatabase(db) {
  db.cleanUp();
}

afterAll(() => {
  cleanUpDatabase(globalDatabase);
});

beforeAll(() => {
  return globalDatabase.insert({ testData: "foo" });
});

test("can find things", () => {
  return globalDatabase.find("thing", {}, (results) => {
    expect(results.length).toBeGreaterThan(0);
  });
});

test("can insert a thing", () => {
  return globalDatabase.insert("thing", makeThing(), (response) => {
    expect(response.success).toBeTruthy();
  });
});

beforeAll테스트가 실행되기 전에 실행되는 전처리기이다. (단 한번만 실행된다.)

해당 테스트들이 실행되기 전에 단 한번 실행되는 메서드이다. (DB 연결 같은 곳에 사용하면 좋다고 생각된다.)

 

afterAll테스트가 실행된 후에 실행되는 후처리기이다. (단 한 번만 실행된다.)

모든 테스트가 종료된 후에 실행되는 메서드이다.

 

(참고: https://jestjs.io/docs/api#beforeallfn-timeout / https://jestjs.io/docs/api#afterallfn-timeout)


상황에 맞춰 beforeEach/beforeAll/afterEach/afterAll 메서드를 골라서 사용해주면 되며,

하나 주의할 점은 before, after에서 실행되는 게 비동기 처리 같은 것이라면 기본 제한시간은 5초이라는 것이다.

반응형


댓글

TOP