2014-01-24 48 views
0

我正在開發角度的web應用程序。 下面是我的控制器的方法,當錯誤happends將設置fetchPlayersFailed爲true:

$scope.fetchAllPlayers = function() { 
    $scope.players = PlayerFact.query({ 
      active: true 
     }, 
     undefined, 
     function() { 
      console.log('set fetchPlayersFailed to true'); 
      $scope.fetchPlayersFailed = true; 
     } 
    ); 
}; 

但是當我運行單元測試,誤差在這種方法中發生,下面是我寫的規格:

it('fetchAllPlayers: should set fetchPlayersFailed to true when error happens', function() { 
    httpBackend.expectGET('/api/players?active=true').respond(500); 
    scope.fetchAllPlayers(); 
    httpBackend.flush(); 
    expect(scope.fetchPlayersFailed).toEqual(true); 
    }); 

這裏的錯誤:

Chrome 32.0 (Windows) Controller: PlayerCtrl fetchAllPlayers: should set fetchPl 
ayersFailed to true when error happens FAILED 
     Expected false to equal true. 
     Error: Expected false to equal true. 
      at null.<anonymous> (C:/Users/I056958/Documents/My Own/javascript wo 
rkspace/redjoker/test/spec/controllers/player.js:111:38) 

爲什麼fetchPlayersFailed沒有被設置爲true?

+0

是消息'設置fetchPlayersFailed到TRUE'登錄到控制檯? – dfsq

+0

是的,它已記錄。 –

回答

1

我建議whenGET('url')。在你的測試中響應(500),因爲你沒有測試你的測試中的調用。 另外,如果PlayerFact是一個返回$ resource對象的服務,我認爲最好嘲笑它。

你的問題是你的函數在查詢中,它是成功的回調,而不是錯誤處理程序,即如果PlayerFact是$資源對象。 這是您更新的代碼:

 
    $scope.fetchAllPlayers = function() { 
     $scope.players = PlayerFact.query({ 
      active: true 
     }, 
     undefined, 
     function(){ 
     }, 
     function() { 
      console.log('set fetchPlayersFailed to true'); 
      $scope.fetchPlayersFailed = true; 
     }); 
    }; 
+0

感謝您的回答,這正是問題所在。 –

+0

但是我有點困惑,根據官方的角度文件:'HTTP GET「class」actions:Resource.action([parameters],[success],[error])'所以查詢使用GET操作,這意味着應該只有3個參數。 **第一個參數**:{active:true},**第二個參數**:未定義,(這個應該是成功回調)。 **第三個參數**:function(){},(這個應該是錯誤回調)。這裏有一些誤解嗎? –

+0

@TestersGonnaTest你知道如何單元測試上述功能嗎?具有查詢參數的$資源?我試圖弄清楚這一點,但無法找出如何。謝謝 –