如何找到永远不会解析的 JavaScript Promise 的堆栈跟踪?

问题描述 投票:0回答:1

我在 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。

javascript node.js jasmine
1个回答
0
投票

希望这对你有帮助

详细 Promise 日志记录: 使用

longjohn
bluebird
等库来增强 Promise 创建、解析和拒绝的日志记录。

Node.js 调试器: 使用

node --inspect-brk
在调试模式下启动测试。在调试器中,暂停执行、检查变量并单步执行代码以查明 Promise 陷入困境的位置。

未处理的拒绝处理: 监听

unhandledRejection
事件以捕获任何可能默默失败的 Promise 拒绝:

process.on('unhandledRejection', (error) => {
  console.error('Unhandled Promise Rejection:', error);
});
© www.soinside.com 2019 - 2024. All rights reserved.