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
相关产品推荐
相关产品推荐

