jest.fn()jest.spyOn(obj, "메서드 이름")expect.assertions(1)로 실제 expect가 실행되는지 확인해주는 것이 좋음return 을 넣어줘야 함return이 없으면 테스트가 종료되기 전에 끝나서 정확한 테스트가 불가async를 붙이게 되면 return 없어도 됨Promise, Async 둘 다 방법은 똑같음
resolves / rejects 사용
test('Promise 성공 테스트1', () => {
expect(successPromise).resolves.toBe('성공');
});
test('Promise 실패 테스트1', () => {
expect(failPromise()).rejects.toThrow('실패');
});
then / catch사용
test('Promise 성공 테스트2', () => {
const spyOn = jest.fn(successPromise);
return spyOn().then(() => {
expect(spyOn).toHaveBeenCalledWith('성공');
});
});
test('Promise 실패 테스트2', () => {
return failPromise().catch((e) => {
expect(e).toEqual(new Error('실패'));
});
});
async / await 사용
test('Promise 성공 테스트3', async () => {
const result = await successPromise();
expect(result).toBe('성공');
});
test('Promise 실패 테스트3', async () => {
try {
await failPromise();
} catch (e: any) {
expect(e).toBeInstanceOf(Error);
expect(e.message).toBe('실패');
}
});
test('에러 테스트', () => {
expect( () => error()).toThrow(Error);
})