jest 学习:异步代码的测试
在JavaScript中执行异步代码是很常见的。 当你有以异步方式运行的代码时,Jest 需要知道当前它测试的代码是否已完成,然后它可以转移到另一个测试。
回调:最常见的异步模式是回调函数
function delayExecute(fn: (res: string) => void, delay?: number) {
delay = typeof delay === 'undefined' ? 1000 : delay;
setTimeout(() => {
fn(String(delay));
}, delay);
}
import { delayExecute } from './async';
test('delayExecute: default 1000/0, when delay is empty/0', (done) => {
delayExecute((res) => {
expect(res).toBe('1000');
done();
});
delayExecute((res) => {
expect(res).toBe('0');
done();
}, 0);
});
Promises
如果你使用Promise,则测试异步代码有一种更简单的方案。 为你的测试返回一个Promise,则Jest会等待Promise的resove状态 如果 Promise 被拒绝,则测试将自动失败。
test('fetData: should get login/username from github', () => {
return fetchData().then((data: any) => {
expect(data.login).toBe('afeiship');
});
});
.resolves / .rejects
test('fetData: resolves should match object.', () => {
return expect(fetchData()).resolves.toMatchObject({ login: 'afeiship' });
});
Async/Await
test('fetchData: use async', async () => {
const data = await fetchData();
expect(data).toMatchObject({ login: 'afeiship' });
});