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

Node升级至v16.16.0后使用new关键字创建Error报错求助

问题原因解析

首先明确:new Error()本身完全合法,报错指向这行只是Jest错误栈的定位偏差,真正问题出在代码逻辑缺陷,再结合Node.js v16与旧版Jest的兼容性差异,才导致了这种误导性的报错。

1. 代码逻辑的核心问题

你定义的submitFormPromise里的json方法存在明显错误:

json: () => {
  Promise.reject(error);
}

这个箭头函数没有返回值,默认返回undefined。但真实的fetch API中,response.json()会返回一个Promise,当组件调用这个模拟的json()方法时,拿到的不是预期的Promise而是undefined,后续异步处理逻辑直接崩溃。

在Node.js v12环境下,Jest的错误捕获机制相对宽松,异步错误被掩盖;升级到Node.js v16后,Jest(尤其是你使用的jest-jasmine2旧版本)的错误栈解析逻辑更严格,却出现了定位偏差,把错误指向了new Error()这行无关代码。

2. 版本兼容性的影响

你使用的jest-jasmine2旧版本与Node.js v16的兼容性不佳,Node.js v16对Promise和异步错误的处理更规范,两者叠加导致错误栈的定位出现误导。

修复步骤

  • 先修正json方法的返回逻辑,确保返回Promise:
    json: () => Promise.reject(error);
    // 或者显式添加return
    json: () => {
      return Promise.reject(error);
    }
    
  • 升级Jest到27.x及以上版本,保证与Node.js v16的兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 07:24:22