Angularjs 用量角器测试异步更新序列?

Angularjs 用量角器测试异步更新序列?,angularjs,protractor,Angularjs,Protractor,比如说,有一个按钮可以触发某种需要一段时间的数据处理。在处理过程中,我想通过显示诸如Working…、Working Every hard…、Every there…,等消息来告诉用户我们在哪里。可以保证,在处理完成之前,所有这些消息都会一个接一个地出现。任务是使用量角器检查此场景 下面是一个示例代码: <div ng-controller="AppController"> <p>{{message}}</p> <button type="but

比如说,有一个按钮可以触发某种需要一段时间的数据处理。在处理过程中,我想通过显示诸如Working…、Working Every hard…、Every there…,等消息来告诉用户我们在哪里。可以保证,在处理完成之前,所有这些消息都会一个接一个地出现。任务是使用量角器检查此场景

下面是一个示例代码:

<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>
不起作用。在我的情况下,测试失败:

Expected 'Working very hard...' to equal 'Working...'.
这是可以理解的,我假设量角器只是等待所有悬而未决的事情完成,然后再继续


我可以想到的一种方法是,在元素内容发生更改时显式轮询DOM以进行监视。这是我想要避免的。有更好的选择吗?

您可以尝试一下新功能: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); 

您可以尝试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); 

TextToBePresentElement不适用于我的案例。请参阅文本ToBePresentElement不适用于我的案例。请参阅