排毒测试:追踪Javascript计时器,导致测试框架永远等待

时间:2018-05-02 17:30:08

标签: javascript testing detox

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

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

这是输出的一个例子:

Detox info log

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

  • 我想过包装setTimeout函数,但不确定进行该操作的最佳方法是什么。
  • 我可以消除或至少在我自己的代码中包裹setTimout,这样,至少确定它是第三方lib(它仍然无助于解决问题)。

1 个答案:

答案 0 :(得分: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);

并将为您提供该功能中第一个超时设置的堆栈跟踪(同步)。然后,您可以对其进行评论并搜索下一个。

但是,不是追踪所有超时,快速解决方案可能只是抛出一个未捕获的错误来结束该过程。