web-dev-qa-db-ja.com

失敗:非同期Angularタスクが11秒後に終了するのを待ってタイムアウトしました

Protractorを使用してangular 2アプリケーションをエンドツーエンドでテストしたいのですが、メッセージが行き詰まっています。

"Failed: Timed out waiting for asynchronous Angular tasks to finish after 11 seconds."

Confファイル。

exports.config = {
  directConnect: true,
  specs: ['spec.js'],

  // For angular2 tests
  useAllAngular2AppRoots: true,
}

Chromeが開かれ、Webサイトも開かれた後、タイムアウトするまで何も起こりません。

(browser.ignoreSynchronization = true;を使用して)同期を無効にすると、問題ありません。しかし、分度器を使用する主な利点の1つである「自動待機」機能を失います。

このアプリケーションは、angular 2.に完全に基づいています。

私たちの開発者は、私たちはポーリングしていないと言っていました( 分度器ドキュメント によると考えられる原因の1つ)。ところで、websocketアーキテクチャを使用しています。リンクがあるかどうかわかりません。

実際、この問題のトラブルシューティング方法はまったくわかりません。

誰か助けてくれませんか?

17
Tibeben

あなたの推測は正しいです。このエラーは、angular2アプリケーションで実行されている未解決のタスクがある場合に発生します。

はい、最も一般的な理由は、アプリケーションが$ timeoutまたは$ httpを継続的にポーリングする場合です。Protractorは無期限に待機してタイムアウトします。しかし、これはアプリが11秒以上かかるシナリオでも発生する可能性があります

さまざまなタイムアウトの詳細については、 here を参照してください

デフォルトのタイムアウト値は11秒です。これを変更するには、 config.js で以下の値を調整し、まだ問題が発生するかどうかを確認してください。

  /**
   * The timeout in milliseconds for each script run on the browser. This
   * should be longer than the maximum time your application needs to
   * stabilize between tasks.
   */
  allScriptsTimeout?: number;
6
AdityaReddy

回答 here で報告されているように、browser.ignoreSynchronizationを一時的に有効にすると修正されます。

browser.ignoreSynchronization = true;

(エラーをスローするコード)

browser.ignoreSynchronization = false;
5
emery

テストケースを変更し、最初のクリックの後に browser.waitForAngularEnabled(false); と入力すると、動作するはずです。

ただし、推奨される方法は、conf.jsファイルとしてallScriptsTimeout: 110000

2
Saikat Sengupta