Page 277 - AngularJS权威教程
P. 277

19.14  测试一个应用    257


                                                                                                     19



                                                                                                     20


                                                                                                     21


                                                                                                     22


                                               图19-6  内容加载测试                                         23


              19.14.3  测试控制器                                                                         24

                  控制器包含了应用的业务逻辑。控制器是$scope把控制与视图关联起来的地方。既然我们要
              在控制器中做应用内的多数更新视图的工作,那就要建立测试来保证它们的行为是按预期执行的。                                            25
                  1. 单元测试控制器
                                                                                                     26
                  当对控制器作单元测试时,需要建立测试来模拟Angular的行为。
                  在建立单元测试的过程中,需要确保:                                                                  27

                   建立了测试来模拟模块;
                   用一个已知的作用域实例来存储控制器的一个实例;                                                          28
                   基于作用域来测试我们的预期。
                  要初始化一个控制器实例,需要使用$new()方法从$rootScope创建某作用域的一个新实例。                                   29
              这个新实例会建立Angular在运行时使用的作用域继承。

                  有了这个作用域,就可以初始化一个新的控制器,把这个作用域作为控制器的$scope传递                                         30
              过去。

                  describe('Unit controllers: ', function(){                                         31
                    // 模拟myApp模块
                    beforeEach(module('myApp'));
                    describe('FrameController', function() {                                         32
                      // 局部变量
                      var FrameController, scope;
                      beforeEach(inject(
                        function($controller, $rootScope) {                                          33
                          // 创建子作用域
                          scope = $rootScope.$new();
                          // 创建FrameController的新实例                                                   34
                          FrameController = $controller('FrameController',
                            { $scope: scope });
                       }));
                                                                                                     35
                     // 我们的测试代码放在这里
                     });
                   });                                                                               36
   272   273   274   275   276   277   278   279   280   281   282