Page 283 - AngularJS权威教程
P. 283

19.14  测试一个应用    263


                  例如,可以测试一个服务填充了视图中的一个事件列表。在一个用于显示事件列表的/events                                       19
              页面,我们可以断言确实列出了符合预期的事件数:
                  beforeEach(function() {                                                            20
                    browser().navigateTo('/#/events');
                  });

                  it('should show 10 events', function() {                                           21
                    expect(
                      repeater('.event_listing li').count()
                    ).toBe(10);                                                                      22
                  });


              19.14.5  测试过滤器                                                                         23

                  过滤器很容易测试:它们是隔离的功能。过滤器的功能就是限制或者改变输出,所以我们会
              在过滤器函数的输出上设置断言。                                                                        24
                  1. 单元测试过滤器
                                                                                                     25
                  对过滤器进行单元测试很简单。首先,要访问过滤器,只需简单地把$filter服务注入到我
              们的测试中。这样我们就得到了一个在此过程中查找过滤器的途径:
                                                                                                     26
                  describe('Unit: Filter tests', function() {
                     var filter;
                                                                                                     27
                      // 在测试中模拟我们的引用
                      beforeEach(module('myApp'));
                      beforeEach(inject(function($filter) {
                         filter = $filter;                                                           28
                     }));
                  });
                                                                                                     29
                  有了对控制器的访问,在过滤器的输出上设置预期就是很容易的事了。
                  it('should give us two decimal points',                                            30
                      function() {
                          expect(filter('number')(123, 2)).toEqual('123.00');
                  });
                                                                                                     31
                  2. 端到端测试过滤器

                  我们也可以用端到端测试在视图中测试过滤器的输出。端到端测试跟用于测试代码的单元测                                           32
              试略有不同,因为我们关注最终用户看到的东西,更甚于关注过滤器函数的具体输出。
                  要建立一个过滤器测试,需要让浏览器加载用于测试过滤器的页面,然后再跟过滤器自身打                                           33
              交道:

                  例如,给定如下用例,有一个对ng-repeat的实时搜索:                                                      34
                   <input ng-model="search.$" type="text" placeholder="Search filter" />
                   <table id="emailTable">
                       <tbody>                                                                       35
                           <tr ng-repeat="email in emails | filter:search.$">
                               <td>{{ $index + 1 }}</td>
                               <td>{{ email.from }}</td>                                             36
                               <td>{{ email.subject | capitalize }}</td>
   278   279   280   281   282   283   284   285   286   287   288