我在 Jasmine 中编写了一个自动化测试来测试我的异步代码。在我的代码中的某个地方,
Promise
无法解析/拒绝并且 Jasmine 错误超时:
Message:
Error: Timeout - Async function did not complete within 5000ms (set by jasmine.DEFAULT_TIMEOUT_INTERVAL)
Stack:
at <Jasmine>
at listOnTimeout (node:internal/timers:573:17)
at processTimers (node:internal/timers:514:7)
这不是给予承诺更多时间的问题。增加超时具有相同的效果,但延迟更长。
不幸的是,该堆栈跟踪并没有引导我找到问题的根源。这是 Jasmine 代码的堆栈跟踪中断了我的测试,而不是等待解析的代码部分。我如何看到后者?
我不确定 Jasmine 在潜在解决方案中考虑了多少因素。例如,Java 有方法查看程序中的所有线程。 Node.JS 有类似的东西吗?是否有库或 Node.js 设置可以使 Promise 更加冗长?
我使用的是节点 v20.10.0。
希望这对你有帮助
详细 Promise 日志记录: 使用
longjohn
或 bluebird
等库来增强 Promise 创建、解析和拒绝的日志记录。
Node.js 调试器: 使用
node --inspect-brk
在调试模式下启动测试。在调试器中,暂停执行、检查变量并单步执行代码以查明 Promise 陷入困境的位置。
未处理的拒绝处理: 监听
unhandledRejection
事件以捕获任何可能默默失败的 Promise 拒绝:
process.on('unhandledRejection', (error) => {
console.error('Unhandled Promise Rejection:', error);
});