2014-10-04 36 views
2

我試圖用量角器一些終端2終端的測試居住在NG-重複的元素和我遇到了以下問題:如何找到由Ajax調用

我有這個網站:

<div ng-controller="Ctrl"> 
    .... 
    <tr ng-repeat="row in service.data"> 
     <td> 
      {{row.name}} 
     </td>        
     <td> 
      <input type="checkbox" ng-modal="row.checked"/> 
     </td> 
    </tr> 
</div> 

,並在我的角度,我有以下JS:

.controller('Ctrl', function($scope){ 
    $http.get('/api/service/').success(function(res){ 
     $scope.service.data = res.data; 
    }); 
}); 

我有麻煩發現,從ng-repeat,因爲它們不存在時所產生的錶行頁面加載。

我的測試,使用此代碼:

var items = element.all(by.repeater('row in service.data')).then(function(row){ 
    // But row is always []. It doesnt wait for $http to finish 
}); 

我試圖做一個測試用例來選中複選框,並單擊其他動作按鈕,但我需要量角器等待$ HTTP調用來完成,首先角色呈現ng-repeat

+0

什麼讓這些行出現在頁面中? – 2014-10-04 20:39:53

+0

ng-repeat重複由'$ http調用獲取設置的'service.data' – AlexCheuk 2014-10-04 20:41:13

+0

但觸發此$ http調用的是什麼?你說的是當頁面加載時數據不在那裏。那麼它何時出現?當用戶點擊一個按鈕? – 2014-10-04 20:45:13

回答

1

我發現問題了!

有兩個問題需要修復!

1.確保在conf.js中定義了rootElement屬性(如果您的角度應用程序不在本體中)!

exports.config = { 
    ... 
    rootElement : '.element' // css selector to the element that contains ng-app 
} 

2.I轉了browser.ignoreSynchronization = true;在每個測試用例之前忘記重新開啓它。

beforeEach(function(){ 
    browser.ignoreSynchronization = true; 
    .... 
}); 

it('case', function(){ 
    browser.ignoreSynchronization = false; 
    .... 
});