2016-11-01 5 views
1

長いポーリングを使用してサーバー上の何かが変更されたときに速い更新を受け取る角度アプリを構築しています。私は、実際のデータをフェッチするために、このような$リソースを使用します。引き出しで長いポーリングを使用するアプリケーションをテストする方法

appServices.factory('Data', ['$resource', 
    function(){ 
    return $resource('', {}, { 
     query: {"url": …, isArray: false} 
    }); 
}]); 

それから私の長いポーリングの世話をするサービスがあります。データがロードされていることを待ちます。それらをどこかに保管してください。 1秒後に次のロングポーリングサイクルを開始します。

app.factory(„DataLoader“, [„Data“, "$timeout", function(Data, $timeout) { 
    return { 
      loadData: function() { 
       var parent = this; 
       var data = Data.query({}, 
         function(result) { 
          /* do something to the data, 
          * then start waiting for an update from the server again 
          */ 
          $timeout(function() { 
           parent.loadData(); 
          }, 1000); 
         } 
       ); 
      } 
    }; 
}); 

これまでのところ魅力的です。

しかし、私は今、このために分度器のテストを書こうとしています。問題は次のとおりです。データが変更されていない場合のみ、サーバーは30秒後に長いポーリング要求をタイムアウトします。 $ timeoutの中に新しいデータが来るのを待っているので、結果が出る前に分度器がタイムアウトします。

私は最後の1時間を捜しましたが、$ timeoutの代わりに$ intervalを使用する以外は解決策がないようです。これは良い古いポーリング設定(3秒ごとにポーリングし、新しいものがない場合はサーバーから空の結果を得る)で動作します。しかし、これを避けるために、私は長いポーリングを実装しました。 $ timeoutは私にとってははるかに分かりやすいオプションです。

この環境でプロトラクターを正常に動作させる方法を教えてください。

+1

もし '$ interval'を使いたくないならば、私はあなたの唯一の他の選択肢は角度と角度同期を無効にすることです。 'browser.ignoreSynchronization = true';別のオプションがあるかわからない – Gunderson

+0

ヒントのおかげで@Gunderson!私はちょうどそれをやって、DOM要素が予想される条件を使用して表示されるのを手動で待っていました。 – fjc

答えて

0

Protractor's documentation on timeoutsをご覧ください。ページ同期のデフォルトの待機時間が11秒であるため、設定ファイルのallScriptsTimeoutを増やす必要があります。

+0

それについても考えてみましょう。唯一の問題は、テストの実行に信じられないほど時間がかかることです。 – fjc

関連する問題