https://angular.github.io/protractor/#/
http://jasmine.github.io/2.4/introduction.html

测试程序有两种主要方法:端对端测试和单元测试。

端对端测试
如果使用自上而下的方法进行测试,那么写测试时就将程序视为一个“黑盒”。与程序交互就如真实用户一样,从“旁观者”的角度评判程序是否达标。这种自上而下的测试技巧被称为端对端测试。

在Angular中,最常用的工具叫作Protractor。Protractor能够打开浏览器与程序交互,收集测试结果,并检验测试结果与预期值是否相符。

单元测试
第二种常用的测试方法是隔离程序的每个部件,在隔离环境中运行测试。这种测试形式叫作单元测试。
在单元测试中,所写的测试需要事先提供既定的输入值与相应的逻辑单元,检测输出结果,确定它是否与我们的预期结果匹配。

--------------------------------------------------------------------------------
下面说说单元测试。

为了测试程序,我们将用到两种工具:Jasmine和Karma。

【Jasmine】
Jasmine是一种用于测试JavaScript代码的行为驱动框架。
利用Jasmine,你可以设置代码在调用后的预期结果。
比如,我们假定Calculator对象有一个sum函数。想确保1加1的结果为2,就可以用一个测试(也叫规格,spec)来表达。使用以下代码:
describe('Calculator', () => {
it('sums 1 and 1 to 2', () => {
var calc = new Calculator();
expect(calc.sum(1, 1)).toEqual(2);
});
});

使用Jasmine的一个优点是代码易于阅读。从以上代码可以看到,我们期望 calc.sum的结果等于2。

测试通常由多个describe块和it块组成。
通常,我们用describe来组织要测试的逻辑单元,对于其内部每个要使用断言的预期都会用到一个it块。然而,这并不是一个硬性规定。你会经常看到一个it块包含多个预期。
在上述Calculator示例中,我们只是列举了一个简单的对象。正因为如此,整个类只使用了一个describe块,而每个方法使用一个it块。
大多数情况下并非如此。比如,某些方法会根据不同输入值产生不同结果,那么这些方法可以拥有多个相应的it块。在这种情况下,最好使用嵌套的describe块:对象级别用一个,每个方法也各用一个,然后在其内部的每个断言语句用一个单独的it块包裹。
更多有关Jasmine和其语法的资料, 参见Jasmine 官方文档: http://jasmine.github.io/2.4/introduction.html。

【Karma】
使用Jasmine,我们可以描述测试和预期结果。要运行测试,还需要为测试提供一个浏览器环境。
Karma应运而生。使用Karma,我们可以在Chrome或Firefox之类的真实浏览器或者PhantomJS这样的空壳浏览器(无用户界面)内运行JavaScript代码。

--------------------------------------------------------------------------------
【Angular 单元测试框架】
Angular自身提供了一套基于Jasmine框架的辅助类,用以帮助我们编写单元测试。
主要的测试框架位于 @angular/core/testing 包中。(然而,为了测试组件,我们会用到 @angular/compiler/testing 包和 @angular/platform-browser/testing 包中的一些辅助类。稍后具体介绍。)

注:如果这是你初次测试Angular程序,那么在为Angular写单元测试时,需要先完成一些必要的设置步骤。
例如,在需要注入依赖时,我们经常手动配置它们。在测试一个组件时,需要使用测试辅助类初始化它们。在测试路由时,还需要构建一些依赖。
设置有些繁琐,但不用太担心。一旦掌握,你就会发现从一个项目切换到另外一个项目,配置不会有多大变化。

最新文章

  1. 转贴:让Windows 2008 R2 64bit支持ASP.NET 1.1应用程序
  2. 快速入门系列--JMeter压测工具
  3. asp 时间倒数后按钮可用
  4. 在FOR中使用close window,循环次数大于1就会报异常
  5. lru cache java
  6. 为什么JavaScript函数中的参数前面不能加var
  7. VS2013使用EF与mysql数据库.
  8. UVa 10132 - File Fragmentation
  9. 检验金额合法性, 只能是正数 或小数(常用js总结)
  10. 《转》CXF WebService 开发文档-目录索引
  11. 详解CentOS设置163的yum源的过程
  12. [LeetCode&Python] Problem 771: Jewels and Stones
  13. VS2010正则批量替换set_和get_
  14. linux C++ 莫名奇异的段错误(segmentation fault),无法调用其他函数
  15. 汕头市队赛 SRM 06 B 起伏的排名
  16. Django+vue在腾讯云上搭建前后端分离项目
  17. vue-cli 3.0脚手架与vux的配合使用
  18. Activity的onRestart()方法调用时机
  19. 九度oj 题目1348:数组中的逆序对
  20. Minimum Depth of Binary Tree(二叉树DFS)

热门文章

  1. 【JavaScript算法】---快速排序法
  2. Cisco配置发送日志到日志服务器
  3. Eclipse Tomcat插件的使用
  4. Crossed ladders---poj2507(二分+简单几何)
  5. Day23 ajax
  6. Mysql varchar 把默认值设置为null和空的区别
  7. python3 捕捉代码行出错的小程序
  8. hdu5009
  9. Adobe AIR中使用Flex连接Sqlite数据库(1)(创建数据库和表,以及同步和异步执行模式)
  10. 项目管理工具- Maven