[typescript] 비동기 테스트 작성하기 (Promise, Async/Await)

비동기 코드를 테스트하는 것은 항상 도전적인 과제입니다. 특히 TypeScript의 경우 Promise와 Async/Await를 함께 사용하는 경우가 많은데, 이러한 상황에서 효율적으로 테스트를 작성하는 방법에 대해 알아보겠습니다.

Promise 기반 비동기 코드 테스트

보통의 Javascript나 TypeScript에서 비동기 코드를 작성할 때는 Promise를 주로 사용합니다. 예를 들어, 다음과 같은 비동기 함수가 있다고 가정해보겠습니다.

function fetchData(): Promise<string> {
  return new Promise((resolve, reject) => {
    // 비동기 작업 수행
  });
}

이때, Jest와 같은 테스트 라이브러리를 사용하여 해당 함수를 테스트할 수 있습니다.

test('fetchData 함수 테스트', () => {
  return fetchData().then((data) => {
    expect(data).toBe('expected data');
  });
});

위 예제에서 fetchData() 함수를 호출한 후에 반환되는 Promise를 사용하여 결과를 검증합니다.

Async/Await를 사용한 비동기 코드 테스트

모던 JavaScript 및 TypeScript에서는 Async/Await를 사용하여 비동기 코드를 더 간결하게 작성할 수 있습니다.

async function fetchData(): Promise<string> {
  // 비동기 작업 수행
}

위와 같이 async 키워드와 await 키워드를 사용하여 비동기 함수를 작성할 수 있습니다. 해당 함수를 테스트하기 위해선 다음과 같이 작성할 수 있습니다.

test('fetchData 함수 테스트', async () => {
  const data = await fetchData();
  expect(data).toBe('expected data');
});

위 예제에서 fetchData() 함수를 await 키워드를 사용하여 호출하고, 결과를 검증합니다.

결론

Typescript에서 Promise와 Async/Await를 사용하여 작성한 비동기 코드를 효율적으로 테스트하는 방법에 대해 알아보았습니다. Promise 기반의 코드는 .then() 문법을 활용하여 테스트하고, Async/Await를 사용할 경우 asyncawait 키워드를 활용하여 더 간결한 테스트를 작성할 수 있습니다.

비록 JavaScript와 TypeScript의 비동기 코드 테스트는 초반이 어려울 수 있지만, 적절한 테스트 라이브러리와 위의 방법들을 활용하면 효율적으로 테스트할 수 있습니다.

참고 자료: Jest 공식 문서, TypeScript 공식 문서