Неудачные тесты, включающие асинхронный код, терпят неудачу при произвольных условиях - PullRequest
0 голосов
/ 17 апреля 2019

Я столкнулся с интересным сценарием, когда проводил некоторое тестирование с jest на новой кодовой базе, над которой я работал.

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

В моем конкретном сценарии я также использовал moxios , но это уместно только в том смысле, что оно заглушаетфактическая работа, выполняемая axios и все еще возвращает обещание.

Очевидное решение состоит в том, чтобы предусмотреть небольшую задержку перед выполнением утверждений, что прекрасно работает.В этом readme подробно описывается проблема и решение.

Запутанный сценарий

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

Однако

  • Эти тесты хотя pass, когда используется шаблон then catch для работы с обещаниями внутри функции, и fail, когда используется async await pattern.
  • Эти тесты pass, когда каждый запускает тест по отдельности, и сбой при запуске всего набора тестов - я знаю: (
  • Наконец,эти тесты проходят на одних машинах разработчика и не проходят на других, что часто затрудняет выявление проблемы
    ОБНОВЛЕНИЕ: Этот конкретный вопрос был вызван разницей в версиях узла

Вопрос

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

...