비동기 테스트 예제
function fetchProduct(error) {
if (error === 'error') {
return Promise.reject('network error');
}
return Promise.resolve({ item: 'Milk', price: 200 });
}
module.exports = fetchProduct;
- fetchProduct는 error변수가 "error"라는 문자열이면 reject를 반환하고 아니면 resolve를 반환
done 방식
it('async - done', (done) => {
fetchProduct().then((item) => {
expect(item).toEqual({ item: 'Milk', price: 200 });
done();
});
});
- 콜백함수 인자에 done을 넣어주고 마지막에 done() 함수를 실행하는 방식으로 비동기 동작
return 방식
it('async - return', () => {
return fetchProduct().then((item) => {
expect(item).toEqual({ item: 'Milk', price: 200 });
});
});
async await 방식
it('async - await', async () => {
const product = await fetchProduct();
expect(product).toEqual({ item: 'Milk', price: 200 });
});
async resolves/reject 방식
it('async - resolves', () => {
return expect(fetchProduct()).resolves.toEqual({
item: 'Milk',
price: 200,
});
});
it('async - reject', () => {
return expect(fetchProduct('error')).rejects.toBe('network error');
});
- expect에 프로미스 함수를 넣어 리턴
- 성공 케이스는 resolves, 실패 케이스는 rejects를 사용