16

我有一个 Web 应用程序,它使用 Ajax 请求不断地从服务器轮询数据。我想使用zombie.js对其进行集成测试。

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

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

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

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

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

4

1 回答 1

3

Zombie.js 默认会等到页面上的所有脚本都已加载并执行(如果它们正在等待文档准备好)。

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

看着browser.evaluate(expr)

另一种选择是简单地使用正常的 JavaScript 超时等待 20 秒,然后查看 DOM 以了解您期望的更改。

setTimeout(function(){
  browser.document.query("#interestingElement")
}, 20*1000);
于 2013-03-07T20:36:45.600 回答