Page 267 - AngularJS权威教程
P. 267

19.13 模拟$httpBackend   247


              来设置断言,用于校验对应用行为的期望。$httpBackend仅在单元测试中使用。                                              19


                          在端到端测试中也可以用$httpBackend服务,但是这么做一般测不全整个应                                    20
                         用,因为没有使用真正的服务器。


                  使用$httpBackend的测试可行是因为劫持了依赖注入链:我们注入了模拟的$httpBackend,                               21
              而不是使用$http服务产生实际HTTP请求的正版$httpBackend服务。这样就不需要为了支持测
              试而修改应用。
                                                                                                     22
                  1. 冲刷HTTP请求
                  在生产中,$httpBackend异步响应请求,这在测试环境中基本很难配置。因而,我们需要                                      23
              在测试的最后手动冲刷一切挂起的请求,这样才能清理仍然保持了$httpBackend异步行为的执
              行环境。
                                                                                                     24
                  $httpBackend带有两个方法,用于配置模拟的后端系统来处理HTTP响应,这两个方法是
              except和when,它们有不同的使用场景。                                                                25
                  通常,在一个单元测试中,我们要确保配置的所有请求最终都按照预期运行了,如果没有的
              话就抛出异常。此外,还要确保每个测试结束时,不会仍有未结束的请求挂起。                                                    26

                  可以在一个afterEach块中用两个方法来处理这两种情况:
                  // ...                                                                             27
                  afterEach(function() {
                    $httpBackend.verifyNoOutstandingExpectation();
                    $httpBackend.verifyNoOutstandingRequest();                                       28
                  });

                  有的情况下,我们要重置所有已设置请求的预期。要在一个多阶段测试内部复用                                                29
              $httpBackend的同一实例时,会出现这种情况。
                  可以用resetException()方法来重置它们:
                                                                                                     30
                  // ...
                  it('should be a multiple-phase test', function() {
                    // ...                                                                           31
                    $httpBackend.resetExpectations();
                    // ...
                  });
                                                                                                     32
                  2. expect

                  except方法建立了一个请求的期望,用于对应用产生的请求作出断言,也用于定义它们的响                                        33
              应。如果预期的请求没有产生,或者不正确地产生了,测试就失败了。这些请求预期用于建立断
              言:请求已被产生。                                                                              34
                  except方法带有两个必选参数、两个可选参数。

                   method:字符串HTTP方法,就像"GET"或者"POST"。                                                35
                   url:期望调用的HTTP URL或者是一个函数接受给定URL并返回一个标识它是否匹配的
                     布尔值。如果匹配它应该返回true,否则返回false。                                                    36
   262   263   264   265   266   267   268   269   270   271   272