본문 바로가기
카테고리 없음

TestCode: 유닛 테스트 | Jest - 비동기 코드 테스트

by nomfang 2023. 7. 14.
728x90

비동기 코드를 테스트를 할 경우 테스트 중인 코드의 완료 시점을 알아야 한다

Jest 에서는 여러 방법으로 비동기 코드의 테스트 완료 시점을 알 수 있다

promise

테스트에서 promise 를 반환하면 Jest 는 해당 promise 가 해결될 때까지 기다린다

fetching 되어야하는 response data 가 문자열 peanut butter 라고 가정하면
다음과 같이 코드를 작성할 수 있다

test('the data is peanut butter', () => {
  return fetchData().then(data => {
    expect(data).toBe('peanut butter');
  });
});

async / await

테스트에서 async/await 문법을 사용할 수 있다

test('the data is peanut butter', async () => {
  const data = await fetchData();
  expect(data).toBe('peanut butter');
});

test('the fetch fails with an error', async () => {
  expect.assertions(1);
  try {
    await fetchData();
  } catch (e) {
    expect(e).toMatch('error');
  }
});

async/await.resolves, ..rejects 를 결합하여 사용할 수 있다

test('the data is peanut butter', async () => {
  await expect(fetchData()).resolves.toBe('peanut butter');
});

test('the fetch fails with an error', async () => {
  await expect(fetchData()).rejects.toMatch('error');
});

.resolves /.rejects

또한 expect 문에서 .resolves 매처를 사용할 수 있고
Jest는 해당 promise 가 해결될 때까지 기다린다
promise 가 reject 되면 테스트는 자동으로 실패

test('the data is peanut butter', () => {
  return expect(fetchData()).resolves.toBe('peanut butter');
});

assertion 을 반환해야 한다
return 을 생략하면 fetchData() 가 완료되고 .then() 이 콜백을 실행하기 전에
테스트가 종료된다

promise 가 reject 될 것으로 예상되면 .reject 매처를 사용
.resolves 매처 와 유사하게 동작한다
promise 가 resolve 되면 테스트는 자동으로 실패

댓글