You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Jest测试时出现jest-jasmine2 Env.js未处理错误求助

解决Jest测试中Mongoose保存操作的未处理错误

嘿,我一眼就看出问题出在哪了——你在Promise.all里的map回调没有返回emp.save()生成的Promise!这就导致Promise.all根本没在等这些保存操作完成,而这些异步操作抛出的错误也没被任何代码捕获,所以Jest才会弹出这些未处理错误提示。

具体修改方案

把你Manager.js里的这段代码:

var employeeData = Promise.all(employees.map(function(emp) {
  emp.save();
}));

改成下面这样(关键是加上return):

var employeeData = Promise.all(employees.map(function(emp) {
  return emp.save();
}));

或者用更简洁的箭头函数写法:

const employeeData = Promise.all(employees.map(emp => emp.save()));

为什么这样能解决问题?

  • emp.save()是异步操作,会返回一个Promise对象,但你的原代码里map回调没有把这个Promise返回出去,所以employees.map()最终生成的是一个全是undefined的数组。
  • Promise.all需要接收一个Promise数组,当你传入的是undefined数组时,它会立刻resolve结束,但那些emp.save()的异步操作还在后台跑着。一旦其中某个保存操作抛出错误,因为没有任何catch块去处理这个错误,就会触发Jest的未处理错误日志。
  • 至于你的测试看起来能通过,是因为测试的Promise链已经走完了,而后台保存操作的错误是在测试结束后才抛出来的,所以才会出现“测试通过但报错”的矛盾情况。

另外提个小建议:你测试代码里的catch块现在只是打印错误,要是真的出现断言失败或者其他错误,expect.assertions(3)会因为没执行够3个断言而直接失败,你可以考虑在catch里加上throw e,这样能更清晰地看到测试失败的原因。

内容的提问来源于stack exchange,提问作者Alex Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:30:30