1. Callback 테스트
1-1. setTimeout 테스트
jest는 테스트가 시작되면 실행을 멈추지 않는다. 이를 위해 done 콜백을 받으면 done
이 호출되기 전까지 테스트를 끝내지 않고 기다린다.
fn.ts
// 3초 뒤 Mike를 callback 함수로 넘겨준다.
const fn = {
getName: (callback: CallableFunction) => {
const name = 'Mike'
setTimeout(() => {
callback(name)
}, 3000)
},
}
export default fn
fn.test.ts
// 테스트 성공
test('3초 뒤 이름 Mike를 반환한다', done => {
const callback = (name: string) => {
expect(name).toBe('Mike')
done()
}
fn.getName(callback)
})
1-2. 에러 테스트
에러를 감지 하려면 try-catch
문으로 감싼다.
// 3초 뒤 에러를 던진다.
const fn = {
getName: (callback: CallableFunction) => {
const name = 'Mike'
setTimeout(() => {
// callback(name)
throw new Error('error!')
}, 3000)
},
}
export default fn
// 테스트 실패
test('3초 뒤 이름 Mike를 반환한다.', done => {
const callback = (name: string) => {
try {
expect(name).toBe('Mike')
done()
} catch (err) {
done()
}
}
fn.getName(callback)
})
2. Promise 테스트
promise로 리턴해주면 resolve 될 때 까지 기다리기 때문에 done
을 호출하지 않아도 된다.
2-1. then-catch
promise를 테스트할 땐 테스트를 return
해야한다. (return 하지 않으면 테스트가 종료됨)
const fn = {
getAge: () => {
const age = 30
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(age)
}, 3000)
})
},
}
// 테스트 성공
test('3초 뒤 promise로 나이 30을 반환한다.', () => {
return fn.getAge().then(age => {
expect(age).toBe(30)
})
})
2-2. resolves, rejects 매처 사용
promise도 매처로 간단하게 작성할 수 있다.
// 테스트 성공
test('3초 뒤 promise로 나이 30을 반환한다.', () => {
return expect(fn.getAge()).resolves.toBe(30) // resolve 테스트
// return expect(fn.getAge()).rejects.toMatch("error"); // 에러 반환 시 reject 테스트
})
3. async/await
return
대신 await
으로 호출한다.
// 테스트 성공
test('3초 뒤 promise로 나이 30을 반환한다.', async () => {
const age = await fn.getAge()
expect(age).toBe(30)
})