Mocha+Chai单元测试遇setTimeout/Promise超时错误求助
解决async/await单元测试超时问题
核心原因
你的测试超时是因为测试框架的默认超时时间(比如Jest默认500ms)小于createDB中setTimeout的等待时长(1000ms),框架在Promise完成前就判定测试超时失败。
具体解决方案
1. 针对性调整测试超时时间
以Jest为例,可在单个测试用例中设置更长的超时阈值:
test('验证createDB返回值', async () => { const result = await createDB(); expect(result).toBe(10); }, 2000); // 将超时时间设为2000ms,大于1000ms即可
如果需要全局统一调整,可修改框架配置文件:
// jest.config.js module.exports = { testTimeout: 2000, };
2. 模拟定时器(推荐)
为避免真实等待拖慢测试速度,用框架的定时器模拟功能跳过实际等待:
以Jest为例:
jest.useFakeTimers(); test('验证createDB逻辑', async () => { const promise = createDB(); // 快进所有待执行的定时器 jest.runAllTimers(); const result = await promise; expect(result).toBe(10); }); jest.useRealTimers(); // 测试结束后恢复真实定时器
3. 检查async/await语法正确性
确保测试函数标记为async,且正确await目标Promise:
// 正确写法 test('正确使用async/await', async () => { const res = await createDB(); expect(res).toBe(10); }); // 错误写法(未await,测试会提前结束) test('错误示例', () => { createDB().then(res => expect(res).toBe(10)); });
内容的提问来源于stack exchange,提问作者Varun Verma
相关产品推荐
相关产品推荐

