Page 302 - AngularJS权威教程
P. 302

282  第 19 章  测试


             19.23.1  测试列表

                 在<input>元素上建立测试之后,我们可以继续测试列表页的功能,如图19-13所示。


















                                              图19-13  测试列表页
                 既然剩下的待写测试都是在列表页中发生的,我们要把这里剩余的测试都嵌套在它们自己的
             describe()块中。使用一个独立的块能让我们设置另外一个beforeEach()块,在里面我们会建
             立针对angular/angular.js github仓库的测试。

                 这个describe块只会充当访问我们主页的用户,它在输入框中输入,然后按了回车。我们现
             行的测试方式似乎有些多余,但是请记住,端对端测试的目的是自动化用户交互。
                 describe('listing page', function() {
                   beforeEach(function() {
                       element(by.input('repo.name')).sendKeys('angular/angular.js\n');
                   });
                   // ...
                   // 列表页测试会放在这里
                 });
                 列表页会有一些元素,通过ng-repeat迭代出来。使用GitHub API,会默认收到30个问题。
             我们可以测试这个页面确实解析了30个问题。
                 可以使用.repeater()帮助函数来定位ng-repeat元素、这个帮助函数在页面上寻找
             ng-repeat指令,并且找出匹配我们表达式的那一个。在这种情况下,我们是在使用Angular表达
             式d in data | orderBy:created_at:false 。可以用这句来定位循环器:

                 by.repeater('d in data | orderBy:created_at:false')
                 我们可以显式设置过滤器(就像上面那样),或者是停止这个过滤器,使用更通用的:

                 by.repeater('d in data');
                 使用by.repeater()并未真的返回任何元素,只是得到了一个用于获取元素的方法的指
             针。如果我们尝试对by.repeater()方法返回的对象设置期望,只会得到一个难看的错误。
             Protractor这么做是因为元素是通过promise填入的,所以我们要使用element.all()函数来获取
             解析后的元素。

                 var elems = element.all(by.repeater('d in data'));
   297   298   299   300   301   302   303   304   305   306   307