코드가 비동기적으로 실행되는 것은 자바스크립트에서 일반적이다. 비동기적으로 실행되는 코드가 있는 경우, jest는 테스트중인 코드가 언제 완료되었는지 알아야 다른 테스트로 이동할 수 있습니다. Jest는 이것을 다루는 몇 가지 방법이 있습니다.
Promises
테스트로 부터 promise를 반환하면 Jest는 promise가 resolve되기를 기다립니다. 만약 promise가 reject된다면 테스트는 실패합니다.
예를 들어, fetchData가 'peanut butter' 문자열로 해결해야 할 promise를 반환한다고 가정해봅시다. 다음을 사용하여 테스트 할 수 있습니다.
test('the data is peanut butter', () => {
return fetchData().then(data => {
expect(data).toBe('peanut butter');
});
});
Async/Await
대안으로 async와 await을 테스트에서 사용할 수 있습니다. async 테스트를 쓰기위해서 async키워드를 테스트를 넘기는 함수 앞에 사용합니다. 예를 들어, 같은 fetchData 시나리오로 테스트 할 수 있습니다.
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).toMacth('error');
}
});