2016-03-21 4 views
1

私は、初期化を行うときに約束を使うコントローラでテストを作成するのは難しいです。ここに私のanglejs scirptです。 $ httpBackendを使用して

javascript.jsを

var appModule = angular.module('appModule', []); 
appModule.controller('c0001Controller', function($http, $window) { 

    var user = {}; 
    this.c0001Data = user; 
    this.submitForm = function() { 
      if(!angular.isUndefined(this.c0001Data.user_id) && !angular.isUndefined(this.c0001Data.password)) 
      { 
       var promise = $http.post('C0001Login', user); 

       promise.success(function(data, status, headers, config) { 
        if(data.message == 'error'){ 
          alert('Invalid Username/Password'); 
         } else { 
          $window.location.href = data.url + "#/c0003"; 
         } 
       }); 
       promise.error(function(data, status, headers, config) { 
        alert("Invalid Username/Password"); 
       }); 
      } 
      else { 
       alert ("Invalid/ Username/password"); 
      } 

    }; 

}); 
+0

約束に基づく初期化コードは表示されません。それはどこにある? – Phil

+0

'submitForm'メソッドをテストするには、' ngMock'モジュールの '$ httpBackend'を使用してください。 – Phil

+0

OH申し訳ありませんが、私は間違った質問を投稿しました。" $ httpのHttpBackendの使い方 "、私の投稿を編集します。 – Brexter

答えて

1

は、より多くのテストケースでは、あなたの$ HTTPサービスの元のコールを傍受するために偽のコールを設定するようなものです。

コントローラー/サービスでリクエストURL「api/employees」から$ httpを取得したとします。このようにして

$httpBackend.expectGET('api/employees').and.return(200, [ 
    { id: 1, name: 'sample' }, 
    { id: 2, name: 'sample 2' } 
]); 

(JasmineJS)あなたのURLに元$ HTTP GETリクエスト「API /従業員:あなたのテストでは、$ HTTP呼び出し、あなたの関数への実際の呼び出し前にこのような何かをしたいと思います代わりに$ httpBackendのsetup/expected呼び出しが呼び出され、配列データと共にhttpステータスコード200が返されます。

これは、データパラメータを含むPOSTを想定するとうまくいくでしょう。元の$ http呼び出しで使用されたリクエストURL、データ、およびその他の設定は、常に知っておくべきです。

P.S. $ httpBackendを使用するときは、常に適切なHTTPステータスコードを返します。 HTTPステータスコード400を返すと、テストしているコードのcatchブロックがトリガーされます。

+0

ですが、もし私が要求されたURLを要求していないのであれば、代わりに私のjsに基づいて "C0001Login"しか持っていません。 – Brexter

+0

元の$ http呼び出しに渡された引数は、$ httpBackendのexpectGET/expectPOSTなどに正確に反映されていなければなりません。 – amcpanaligan

+0

私は最初にテストを作成し、HttPbackendを試そうとします。ありがとう男 – Brexter

関連する問題