16

Ajax 要求を使用してサーバーからデータを継続的にポーリングする Web アプリケーションがあります。zombie.jsを使用して統合テストを実装したいと思います。

私がやろうとしているのは、Ajax ポーリング ループがサーバーからデータを受け取るまで待つことです。データは 20 秒後に受信されるはずなのでbrowser.wait(done, callback)、データがそこにあるかどうかを確認するために使用しwaitFor、最大タイムアウトを 1 分に設定します。

ただし、コールバックが false を返すbrowser.wait()場合でも、常にほとんどすぐに戻ります。done

ゾンビ API のドキュメントで、次の内容を読みましたbrowser.wait()

... 永遠に待つことはできません。特に、繰り返し起動する可能性のあるタイマー (ページの状態のチェック、ロング ポーリングなど) の場合はそうではありません。

それが私が見た行動の理由だと思いますが、何が起こっているのかよくわかりません。ポーリング ループがサーバーからデータを受信するまで 1 分間待てないのはなぜですか? browser.wait()繰り返し起動する可能性のあるタイマーを待てないのはなぜですか? テストを実装するには何をする必要がありますか?

4

1 に答える 1

3

Zombie.js はデフォルトで、ページ上のすべてのスクリプトが読み込まれて実行されるまで待機します。

私が正しく理解している場合、スクリプトはドキュメントの準備ができてから 20 秒経過するまで実行されません。その場合、Zombie にはブラウザーのコンテキストで JavaScript を評価できる機能があるため、タイマーがオンになっている場合は ajax コードをより迅速に開始でき、それを待ちたくありません。

見るbrowser.evaluate(expr)

もう 1 つのオプションは、通常の JavaScript タイムアウトを使用して 20 秒待機し、DOM を調べて期待する変更を確認することです。

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