Как использовать browser.wait() в zombie.js?
У меня есть веб-приложение, которое непрерывно опросает данные с сервера с помощью Ajax-запросов. Я хотел бы выполнить интеграционный тест для него, используя zombie.js.
То, что я пытаюсь сделать, - подождать, пока цикл опроса Ajax не получит данные с сервера. Данные должны быть получены через 20 секунд, поэтому я использую browser.wait(done, callback)
, чтобы проверить, имеются ли данные, и установите waitFor
на максимальный тайм-аут в одну минуту.
Однако browser.wait()
всегда возвращается почти сразу, даже если мой обратный вызов done
возвращает false.
В документации zombie API я прочитал следующее о browser.wait()
:
... он не может ждать вечно, особенно не для таймеров, которые могут срабатывать многократно (например, проверка состояния страницы, длительный опрос).
Я предполагаю, что причина для поведения, которую я вижу, но я действительно не понимаю, что происходит. Почему я не могу подождать одну минуту, пока мой цикл опроса не получит данные с сервера? Почему не может browser.wait()
ждать таймеров, которые могут срабатывать повторно? Что мне нужно сделать для выполнения моего теста?
Ответы
Ответ 1
Zombie.js по умолчанию будет ждать, пока все сценарии на вашей странице не будут загружены и не выполнены, если они ждут готовности документа.
Если вы правильно поняли, ваш script не будет выполнен после 20 секунд готовности документа. В этом случае у Zombie есть функция, которая позволит вам оценивать javascript в контексте браузера, поэтому вы можете быстрее запустить свой код ajax, если он находится на таймере, и вы не хотите ждать его.
Посмотрите browser.evaluate(expr)
Другой вариант - просто использовать обычный тайм-аут JavaScript, чтобы подождать 20 секунд, а затем посмотреть DOM для ожидаемых изменений.
setTimeout(function(){
browser.document.query("#interestingElement")
}, 20*1000);