0

Detox 测试框架,根据文档TroubleShooting Synchronization提到,测试框架将等待并且仅在应用程序“空闲”时执行您的下一个测试语句。

我现在遇到的问题是我的应用程序永远不会空闲,因为有一些超时持续触发。它可能在我的代码或第三方代码中。

这是一个输出示例:

排毒信息日志

如您所见,每隔几毫秒就会创建一个新计时器。我想做的是追踪哪一个,我可以看到 id,但不知道尝试追踪这个 (setTimeout) id 的确切来源的好方法。

  • 我想包装 setTimeout 函数,但不确定什么是最好的方法。
  • 我可以消除或至少包含setTimout在我自己的代码中,这样至少可以确定它是第三方库(这仍然无助于解决问题)。
4

1 回答 1

0

您可以通过以下方式轻松追踪 setTimeouts:

 // DEV mode only!
 function failOnTimeout(func) {
   const setTimeout = f => {
     throw new Error(`Executing timeout \n ${f.toString()} \n`);
   };

   // A small trick to change scope:
   eval("(" + func.toString() + ")()");
}

所以你可以这样做:

 failOnTimeout(someMysteriousFunction);

并将为您提供该函数中设置的第一个超时的堆栈跟踪(同步)。然后,您可以将其注释掉并搜索下一个。


但是,与其跟踪所有超时,一个快速的解决方案可能是抛出一个未捕获的错误来结束进程。

于 2018-05-02T17:36:25.123 回答