2012-08-24 7 views
15

私は、Ajaxリクエストを使用してサーバーからのデータを継続的にポーリングするWebアプリケーションを持っています。 zombie.jsを使用して統合テストを実装したいと思います。zombie.jsでbrowser.wait()を使用するには?

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

doneコールバックがfalseを返す場合でも、browser.wait()は常に直ちに返されます。 zombie API documentation

は、私はおよそbrowser.wait()以下をお読みください。

...それは、(例えば、ページ状態、ロングポーリングをチェック)特にない繰り返し発射することがタイマーのために、永遠に待つことができません。

私はそれが私が見る動作の理由だと思いますが、何が起こっているのか分かりません。なぜ私のポーリングループがサーバーからデータを受け取るまで1分間待つことができないのですか? browser.wait()なぜ繰り返し発砲するタイマーを待つことができないのですか?テストを実施するためには何が必要ですか?

+0

これについて新しいことを発見しましたか? –

+0

ちょうど確かめてください:あなたは 'waitFor'のためにミリ秒を使っていますよね?私は経験を話します;)また、「maxWait」についても忘れないでください。 – robertklep

+0

"サーバーからのデータを継続的にポーリングする" - これを制御できれば、 'socket.io'は優れた選択肢になります – jcollum

答えて

2

Zombie.jsは、ドキュメントの準備が整うのを待っている場合、ページ上のすべてのスクリプトがロードされて実行されるまで、デフォルトで待機します。

私が正しく理解していれば、ドキュメントは20秒後に実行されることはありません。その場合ゾンビにはブラウザのコンテキストでjavascriptを評価させる関数がありますので、タイマー上にある場合は早くAjaxコードをキックオフすることができ、それを待つ必要はありません。 browser.evaluate(expr)

別のオプションで

ルックは、単純に20秒待ってから、あなたが期待している変更のためのDOMを見て、通常のJavaScriptのタイムアウトを使用することです。

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

ちょっとメモ:ゾンビが本当に素敵なページがロードされましたが、http://stackoverflow.com/questions/37482891/php-mink-zombie-handling-hanging-processes-after-a-fatal-exceptionで見ることができる限り、必ずしもそうである必要はありませんすべてのウェブサイトでは、残念ながら... – sdbbs

関連する問題