TDD를 위한 툴 JEST 사용법 - 설정과 분해

조용환·2024년 4월 18일
0

JEST

목록 보기
3/3

설정과 분해

수행 되기전 설정 작업과 수행 된 후 마무리 작업을 위한 헬퍼 함수를 JEST는 제공함.

많은 테스트를 위한 설정 반복

많은 테스트를 위해 반복적 수행 필요한 작업이 있다면, beforeEach, afterEach 사용 가능

beforeEach(() => {
  initializeCityDatabase();
});

afterEach(() => {
  clearCityDatabase();
});

test('city database has Vienna', () => {
  expect(isCity('Vienna')).toBeTruthy();
});

test('city database has San Juan', () => {
  expect(isCity('San Juan')).toBeTruthy();
});

일회성 설정

한 번만 필요한 설정이 있을 수 있음. 비동기인 경우 이 것이 특히 귀찮음. 이를 위한 beforeAll, afterAll 을 제공

beforeAll(() => {
  return initializeCityDatabase();
});

afterAll(() => {
  return clearCityDatabase();
});

test('city database has Vienna', () => {
  expect(isCity('Vienna')).toBeTruthy();
});

test('city database has San Juan', () => {
  expect(isCity('San Juan')).toBeTruthy();
});

살펴보기 ( 특정 그룹만, before, after 사용하기)

describe 사용해서 테스트들 그룹핑 가능

// 이 파이의 모든 테스트에 적용됩니다
beforeEach(() => {
  return initializeCityDatabase();
});

test('city database has Vienna', () => {
  expect(isCity('Vienna')).toBeTruthy();
});

test('city database has San Juan', () => {
  expect(isCity('San Juan')).toBeTruthy();
});

describe('matching cities to foods', () => {
  // 이 describe 블럭의 테스트에만 적용됩니다
  beforeEach(() => {
    return initializeFoodDatabase();
  });

  test('Vienna <3 sausage', () => {
    expect(isValidCityFoodPair('Vienna', 'Wiener Schnitzel')).toBe(true);
  });

  test('San Juan <3 plantains', () => {
    expect(isValidCityFoodPair('San Juan', 'Mofongo')).toBe(true);
  });
});
//결과물을 통한 흐름체크하기
beforeAll(() => console.log('1 - beforeAll'));
afterAll(() => console.log('1 - afterAll'));
beforeEach(() => console.log('1 - beforeEach'));
afterEach(() => console.log('1 - afterEach'));
test('', () => console.log('1 - test'));
describe('Scoped / Nested block', () => {
  beforeAll(() => console.log('2 - beforeAll'));
  afterAll(() => console.log('2 - afterAll'));
  beforeEach(() => console.log('2 - beforeEach'));
  afterEach(() => console.log('2 - afterEach'));
  test('', () => console.log('2 - test'));
});

// 1 - beforeAll
// 1 - beforeEach
// 1 - test
// 1 - afterEach
// 2 - beforeAll
// 1 - beforeEach
// 2 - beforeEach
// 2 - test
// 2 - afterEach
// 1 - afterEach
// 2 - afterAll
// 1 - afterAll

describe의 실행 순서와 테스트 블럭

Jest는 실제 테스트 실행 전 테스트 파일의 모든 describe 처리기 실행
describe 블럭 내부보다 before, after에서 해야 하는 이유임.

describe('outer', () => {
  console.log('describe outer-a');

  describe('describe inner 1', () => {
    console.log('describe inner 1');
    test('test 1', () => {
      console.log('test for describe inner 1');
      expect(true).toEqual(true);
    });
  });

  console.log('describe outer-b');

  test('test 1', () => {
    console.log('test for describe outer');
    expect(true).toEqual(true);
  });

  describe('describe inner 2', () => {
    console.log('describe inner 2');
    test('test for describe inner 2', () => {
      console.log('test for describe inner 2');
      expect(false).toEqual(false);
    });
  });

  console.log('describe outer-c');
});

// describe outer-a
// describe inner 1
// describe outer-b
// describe inner 2
// describe outer-c
// test for describe inner 1
// test for describe outer
// test for describe inner 2

test.only를 통한 특정성 부여

수행할 테스트가 유일할 경우 테스트가 실패하는가의 여부 체크는 중요하다.
test -> test.only를 통해 특정성을 부여해 테스트 실패 여부 원인을 찾을 수 있다.

test.only('이 테스트는 수행할 유일한 테스트가 될 것입니다', () => {
  expect(true).toBe(false);
});

test('이 테스트는 수행되지 않을 것입니다', () => {
  expect('A').toBe('A');
});
profile
practice react, javascript

0개의 댓글