2015-01-09 45 views
1

假設有一個按鈕觸發某些需要一段時間的數據處理。在處理過程中,我想通過顯示諸如「正在工作...」,「非常努力工作......」,「幾乎在那裏......」等消息來告訴用戶我們在哪裏。確保所有這些消息將在處理完成之前一個接一個出現。任務是用量角器檢查這個場景。使用量角器測試異步更新序列?

所以,這裏是一個例子代碼:

<div ng-controller="AppController"> 
    <p>{{message}}</p> 
    <button type="button" ng-click="go()">Go!</button> 
</div> 
... 
<script> 
    angular.module('app', []) 
    .controller("AppController", function($scope, $timeout) { 
    $scope.message = ""; 
    $scope.go = function() { 
     $scope.message = "Working..."; 
     $timeout(function() { 
     $scope.message = "Working very hard..."; 
     $timeout(function() { 
      $scope.message = "Almost there..."; 
      $timeout(function() { 
      $scope.message = "Done!!!"; 
      }, 1000); 
     }, 1000);   
     }, 1000); 
    }; 
    }); 
</script> 

我明白這種行爲是比較容易與普通的單元測試(茉莉花)進行測試,但讓我們假裝這些$timeout電話是通過一個由後臺發送實際異步更新WebSocket的。

是否有可能以某種方式用量角器測試這個更新序列?

的直接的方法是這樣的:

expect(element(by.binding('message')).getText()).toEqual('Working...'); 
expect(element(by.binding('message')).getText()).toEqual('Working very hard...'); 

不起作用。

​​3210

這是可以理解的,我認爲量角器只是等待所有未決的東西在移動之前完成:在我的情況與測試失敗。

我能想到的一種方法是,顯式輪詢DOM以監視元素內容何時發生更改。這我想避免。有更好的選擇嗎?

回答

4

你可以給一個嘗試新的功能:expected conditions(中加入10小時前):

var EC = protractor.ExpectedConditions; 

var message = element(by.binding('message'); 

browser.wait(EC.textToBePresentInElement(message, 'Working...'), 1000); 
browser.wait(EC.textToBePresentInElement(message, 'Working very hard...'), 1000); 
browser.wait(EC.textToBePresentInElement(message, 'Almost there...'), 1000); 
browser.wait(EC.textToBePresentInElement(message, 'Done!!!'), 1000); 
+0

textToBePresentInElement不工作我的情況。請參閱http://stackoverflow.com/questions/41829169/protractor-wait-command-is-not-able-to-wait-for-the-bootstarp-modal-to-appear –