async/await 函数本质返回 Promise,测试时需用 async 测试函数并 await 调用结果;mock 异步依赖要返回 Promise;副作用断言须在 await 后执行;定时器需用 fake timers 控制。

用 async/await 写的函数本质是返回 Promise 的函数,单元测试时只需确保测试框架支持异步(如 Jest、Vitest、Jasmine 等),并正确等待 Promise 完成即可。
直接 await 测试函数调用
最常见也最直观的方式:在测试用例中直接 await 被测的异步函数,并断言返回值或副作用。
- 测试函数返回 Promise,必须用
await获取解析后的值,否则断言的是 Promise 实例而非实际结果 - Jest/Vitest 中,测试函数本身可声明为
async,框架会自动等待其完成 - 示例(Jest):
test('fetchUser 返回用户对象', async () => {
const user = await fetchUser(123);
expect(user).toEqual({ id: 123, name: 'Alice' });
});
模拟异步依赖(如 API 调用)
真实请求通常需 mock,避免网络依赖和测试不稳定。重点是让 mock 函数也返回 Promise(或直接 async 函数)。
- 用
jest.mock()或vi.mock()替换模块导出的函数 - mock 实现可返回
Promise.resolve(...)或直接写async () => {...} - 若需测试错误路径,mock 返回
Promise.reject(new Error(...)) - 示例(mock
axios.get):
jest.mock('axios');
test('fetchUser 处理 API 错误', async () => {
axios.get.mockRejectedValueOnce(new Error('Network error'));
await expect(fetchUser(123)).rejects.toThrow('Network error');
});
验证副作用(如状态更新、函数调用)
异步函数常伴随状态变更或回调执行,需验证这些行为是否按预期发生。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 用 jest.fn() 创建 mock 函数,传入被测函数作为回调或依赖
- 在
await后检查 mock 是否被调用、调用次数、参数等 - 注意:如果副作用发生在 Promise resolve 之后(如
.then()或await后的代码),它会在await完成后同步执行,可直接断言
处理定时器或延迟逻辑
含 setTimeout、delay() 等的函数,测试时别让测试等待真实时间。
- Jest 提供
jest.useFakeTimers()+jest.runAllTimers()或advanceBy控制时间 - Vitest 用
vi.useFakeTimers()+vi.runAllTimers() - 确保在测试结束前触发所有延迟逻辑,再做断言
不复杂但容易忽略:只要函数返回 Promise,测试就该等它;mock 要保持异步语义一致;副作用断言放在 await 之后——逻辑就稳了。

















