我有一个Web应用程序,它使用Ajax请求不断轮询来自服务器的数据。我想使用zombie.js为它实现集成测试。
我要做的是等到Ajax轮询循环从服务器接收数据。数据应在20秒后收到,因此我使用browser.wait(done, callback)
检查数据是否存在,并将waitFor
设置为最大超时时间为一分钟。
但是,即使我的browser.wait()
回调返回false,done
也会立即返回。
在zombie API documentation中,我阅读了以下有关browser.wait()
:
...它不能永远等待,特别是对于可能反复触发的计时器(例如,检查页面状态,长轮询)。
我想这就是我所看到的行为的原因,但我并不真正理解发生了什么。为什么我不能等待一分钟,直到我的轮询循环从服务器接收数据?为什么不能browser.wait()
等待可能反复发射的计时器?我需要做什么来实施我的测试?
答案 0 :(得分:2)
Zombie.js将默认等待,直到页面上的所有脚本都已加载并执行,如果他们正在等待文档准备就绪。
如果我理解正确,您的脚本将在文档准备好20秒后才会执行。在这种情况下,Zombie有一个功能,可以让你在浏览器的上下文中评估javascript,这样你可以更快地启动你的ajax代码,如果它在一个计时器上,你不想等待它。
另一种选择是简单地使用普通的JavaScript超时等待20秒,然后查看DOM以了解您期望的更改。
setTimeout(function(){
browser.document.query("#interestingElement")
}, 20*1000);