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

Node.js 如何在zombie.js中使用browser.wait()?,node.js,zombie.js,Node.js,Zombie.js,我有一个Web应用程序,它使用Ajax请求不断轮询服务器上的数据。我想使用实现it的集成测试 我试图做的是等待Ajax轮询循环从服务器接收数据。数据应该在20秒后收到,因此我使用浏览器。等待(完成,回调)检查数据是否存在,并将waitFor设置为最长超时一分钟 但是,browser.wait()总是几乎立即返回,即使我的done回调返回false 在中,我阅读了以下关于browser.wait(): 。。。它不能永远等待,特别是对于可能反复触发的计时器(例如检查页面状态、长轮询) 我想这就是我看

我有一个Web应用程序,它使用Ajax请求不断轮询服务器上的数据。我想使用实现it的集成测试

我试图做的是等待Ajax轮询循环从服务器接收数据。数据应该在20秒后收到,因此我使用
浏览器。等待(完成,回调)
检查数据是否存在,并将
waitFor
设置为最长超时一分钟

但是,
browser.wait()
总是几乎立即返回,即使我的
done
回调返回false

在中,我阅读了以下关于
browser.wait()

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


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

Zombie.js默认情况下将等待,直到页面上的所有脚本都已加载并执行,如果它们正在等待文档就绪

如果我理解正确,您的脚本在文档准备就绪20秒后才会执行。在这种情况下,Zombie有一个函数,可以让您在浏览器的上下文中评估javascript,因此如果ajax代码在计时器上,您可以更快地启动它,并且您不想等待它

另一种选择是简单地使用一个普通的JavaScript超时等待20秒,然后查看DOM以获得预期的更改

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

您发现了这方面的新情况吗?只是想确定一下:您使用毫秒来表示
waitFor
,对吗?我说的是经验;)另外,不要忘了
maxWait
“不断地从服务器上轮询数据”--如果你能控制它,
socket.io
将是一个很好的选择。请注意:如果Zombie真的等到页面上的所有脚本都加载完毕,那就太好了,但就我所见,不幸的是,并非所有网站都是如此。。。