Детокс-тестирование: отслеживание таймеров Javascript, заставляющее тестовую среду ждать вечно - PullRequest
0 голосов
/ 02 мая 2018

Среда тестирования Detox, согласно документации TroubleShooting Synchronization упоминает, что среда тестирования будет ожидать и выполнять ваш следующий оператор теста, только когда приложение находится в режиме ожидания.

Проблема, с которой я столкнулся сейчас, заключается в том, что мое приложение никогда не останавливается, потому что время ожидания постоянно истекает. Это может быть в моем коде или стороннем коде.

Вот пример вывода:

Detox info log

Как вы видите, что-то создает новый таймер каждые несколько миллисекунд. Что бы я хотел сделать, это отследить, какой из них, я могу видеть идентификаторы, но не знаю хорошего способа, чтобы попытаться отследить, откуда именно этот (setTimeout) идентификатор идет.

  • Я думал об обёртывании функции setTimeout, но не уверен, как лучше это сделать.
  • Я мог бы исключить или, по крайней мере, обернуть setTimout в своем собственном коде, таким образом, по крайней мере, определив, что это сторонняя библиотека (которая все еще не помогает решить проблему).

1 Ответ

0 голосов
/ 02 мая 2018

Вы можете легко отследить 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);

И даст вам трассировки стека первого таймаута, установленного в этой функции (синхронно). Затем вы можете закомментировать это и искать следующий.


Но вместо того, чтобы отследить все таймауты, быстрое решение может заключаться в том, чтобы просто выдать непогашенную ошибку, чтобы завершить процесс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...