Page 241 - AngularJS权威教程
P. 241

19.4  AngularJS 测试的类型    221


              JavaScript代码的测试也是有些困难的,因为这要求我们把自动化功能放在浏览器里。                                            19
                  构建一个开发测试套件已经够困难了,想要支持持续集成会怎样呢?这样我们新部署的代码
              可以被自动测试,也可以在创建新版本之前对代码质量有信心。                                                           20

                      在软件工程中,持续集成是这样的实践:一天内多次合并共享同一主线的开发工作
                  的副本,并且在更新的基础上运行测试套件。                                                               21

                        ①
                  Karma 是一个测试工具,它从头开始构建,免去了设置测试方面的负担,这样我们就可以
              将主要精力放在构建核心应用逻辑上。                                                                      22
                  Karma产生一个浏览器实例(或者多个不同的浏览器实例),针对不同的浏览器实例运行测
              试,检测在不同浏览器环境下测试是否通过。Karma与浏览器通过socket.io来联系,这能让Karma                                   23
              保持持续通信。因此Karma提供了关于哪些测试正在运行的实时反馈,提供一份适合人类阅读的
              输出,告诉我们哪些测试通过、哪些失败或者超时。                                                                24
                  Karma可以原生地与多个不同浏览器通信,消除了手工在多个浏览器上测试代码的需要。比
              如说,它可以在Chrome、IE、FireFox上运行测试,把结果分别输出到控制台。我们甚至可以连                                      25
              接到自己的本地设备(是的,比如iPhone或者iPad)来测试代码。
                                                                                                     26
              19.4  AngularJS 测试的类型

                                                                                                     27
                  要测试我们的Angular应用,有好几种不同的方式,取决于我们想关注什么级别的粒度,想
              要完成什么功能。
                                                                                                     28
              19.4.1  单元测试
                                                                                                     29
                  我们可以专注于构建我们的测试来隔离具体、单独组件的代码。这种方法被称为“单元测试”,
              在不同阶段、不同条件下、以不同的输入来测试各种特定单元的代码。
                                                                                                     30
                  单元测试专门用于测试小型、独立的代码单元,单个函数,或者较小的带有功能的交互。它
              不是用来测试大功能集的。
                                                                                                     31
                  单元测试的麻烦在于把逻辑隔离成小块,这样我们才能测试它。本章的后面部分会讨论实现
              隔离的策略。
                                                                                                     32
                  何时选择单元测试

                  当编写功能代码的时候,我们将会创建小的功能组件。例如,在构建一个应用用于实时过滤                                           33
              列表中元素时,会构建一个过滤器功能。

                  这个过滤器的功能是一个功能单元,当我们需要使用单元测试进行测试时,它是理想的选择。                                          34
              要确保这个功能已经实现,按照预期工作,我们需要隔离这个组件,并且用不同的输入来测试。

                      设想我们正在构建一艘火箭飞船。我们想要测试每艘飞船的一部分(例如推进器、                                           35
                  操纵杆控制、供氧系统)来验证飞船通常是按照我们期望的那样工作的。
              ——————————                                                                             36
                 ① http://karma-runner.github.io/0.10/index.html
   236   237   238   239   240   241   242   243   244   245   246