2016-03-14 8 views
5

私は、ユーザーがインターネットに接続しているかどうかを確認する必要があるWebアプリケーションを持っています。実装では、既知のエンドポイントへのajax pingが成功するとtrueになることを保証し、ajax呼び出しが失敗した場合はfalseを返します。ネットワーク障害をシミュレートしたジャスミンでajaxリクエストを模擬することはできますか?

ジャスミンでは、私はrequest.respondWith({status:400, etc})を使用して失敗をシミュレートできますが、電話の基本的なエラーをシミュレートする方法を試すことはできません。

実際には、呼び出しが行われなかった場合でも、ブラウザはステータスコード0とreadyState 4を「返す」ように見えます。

私はジャスミン試験でどのようにこれにアプローチする必要がありますか?

+0

を経由してあなたのダミーオブジェクトを生成し、関数に渡すために私をできたことができます使用してきました代わりに 'window.navigator.onLine'を使用して、ネットワークに接続しているかどうかを確認してください。 – Shilly

+0

存在しないURLに対してpingを実行するだけですか?これは常に失敗ステータスで応答します – Maxwelll

答えて

0

これは興味深い質問です。私はあなたにそれについての正直な答えを提供しないかもしれませんが、私はそれを刺すようにしたいと思います。

以下のコードは、そのような3つの例を示しています(むしろテストです)。

  • errorFunctionreadySatate === 4 && status === 0および他のすべての error/failコールバック
  • makeAPICallが上jqXHRを返す場合に行わ から呼び出される誤差関数である:action

    var errorFunction = function(jqXHR, status, error) { 
        console.log('This is errorFunction') 
        } 
    
        var makeAPICall = function(url) { 
        return $.ajax({ 
         url: url, 
         fail: errorFunction, 
         error: errorFunction 
        }); 
        } 
    
        var testFunction = function() { 
        makeAPICall().done(function(data, status, xh) { 
         if (xh.status === 0 && xh.readyState == 4) { 
         errorFunction(); 
         return; 
         } 
         console.log("this is successFunction"); 
        }).fail(errorFunction); 
        } 
    
        var getData = function() { 
        var str = 'ABCDEFGHIJ' 
        var returnStr = ''; 
        for (var i = 0; i < 3000; i++) { 
         returnStr += str; 
        } 
        return returnStr; 
        } 
    
        describe('test ajax errors', function() { 
        it('tests a failed call due to huge payload ', function() { 
         var xhrObj = $.ajax({ 
         url: 'https://jsonplaceholder.typicode.com/posts?userId=' + getData(), 
         async: false 
         }); 
         console.log('Below is the xhr object that is breing returned via spy'); 
         console.log(xhrObj);  
         spyOn(window, 'makeAPICall').and.returnValue(xhrObj); 
         spyOn(window, 'errorFunction').and.callThrough();  
         testFunction(); 
         expect(window.errorFunction).toHaveBeenCalled(); 
        }); 
    
        it('tests a failed call due to some n/w error scenario (readyState->4, status->0)', function() { 
         var xhrObj = $.ajax({ 
         url: '',  
         async: false 
         }); 
         xhrObj.status = 0; 
         xhrObj.statusText = 'error'; 
         console.log('Below is the xhr object that is breing returned via spy'); 
         console.log(xhrObj);  
         spyOn(window, 'makeAPICall').and.returnValue(xhrObj); 
         spyOn(window, 'errorFunction').and.callThrough();  
         testFunction(); 
         expect(window.errorFunction).toHaveBeenCalled(); 
        }); 
    
        it('tests a failed call (bad url pattern)', function() { 
         var xhrObj = $.ajax({ 
         url: 'https://jsonplaceholder.typicode.com/postssss/1', 
         async: false 
         }); 
         console.log('Below is the xhr object that is breing returned via spy'); 
         console.log(xhrObj);  
         spyOn(window, 'makeAPICall').and.returnValue(xhrObj); 
         spyOn(window, 'errorFunction').and.callThrough();  
         testFunction(); 
         expect(window.errorFunction).toHaveBeenCalled(); 
        }); 
    
    
        }); 
    

    ノートでそれを参照してください。 which done & failコールバックが使用されます。

  • getData
  • 巨大なペイロードを生成するユーティリティ関数である:TEST1に使用
  • 第二の試験は、シミュレートするように、空urlダミーAJAX呼び出しを行う程度でreadyState->4 & status->0
  • 第3の試験は、通常の悪い要求URLパターンをシミュレートテスト。すべての3つのシナリオについて
  • 、私はasync: false設定$.ajax({some params & async false})
  • によって作成されたjqXHRオブジェクトがspy
関連する問題