如何在zombie.js中使用browser.wait()?

我有一个Web应用程序使用Ajax请求不断地从服务器轮询数据。 我想使用zombie.js来实现一个集成testing。

我正在试图做的是等到Ajax轮询循环从服务器接收数据。 应该在20秒后收到数据,所以我使用browser.wait(done, callback)检查数据是否存在,并将waitFor设置为一分钟的最大超时时间。

然而,即使我的donecallback返回false, browser.wait()总是立即返回。

在僵尸API文档中 ,我阅读了关于browser.wait()的以下内容:

……它不能永远等待,特别是对于可能反复激发的定时器(例如检查页面状态,长时间轮询)。

我想这就是我看到的行为的原因,但是我不太明白发生了什么事情。 为什么我不能等待一分钟,直到我的轮询循环从服务器接收数据? 为什么不能browser.wait()等待可能重复触发的定时器? 我需要做什么来实施我的testing?

Zombie.js将默认等待,直到您的页面上的所有脚本已经加载并执行,如果他们正在等待文档准备好。

如果我正确地理解了你的文档,准备好20秒后你的脚本将不会执行。 在这种情况下,僵尸有一个函数,它可以让你在浏览器的上下文中评估JavaScript,所以你可以更快地启动你的ajax代码,如果它在一个计时器上,而你不想等待它。

看看browser.evaluate(expr)

另一个select是简单地使用正常的JavaScript超时等待20秒,然后查看DOM所需的更改。

 setTimeout(function(){ browser.document.query("#interestingElement") }, 20*1000);