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

Angular单元测试的更多相关文章

  1. angular单元测试与自动化UI测试实践

    关于本文:介绍通过karma与jsmine框架对angular开发的应用程序进行单元与E2E测试. angular单元测试与集成测试实践 先决条件 创建项目 webstorm中创建空白web项目 创建 ...

  2. Angular单元测试系列

    Angular单元测试系列 - 大纲Angular单元测试系列 - 简介Angular单元测试系列 - 如何使用Jasmine进行Angular单元测试Angular单元测试系列 - Router.C ...

  3. karma作为jQuery单元测试Runner

    karma作为angular测试runner出现,如果你使用过karma一定感受到这很不错的javascript测试runner.简单干净的配置文件karma.config.js,以及karma in ...

  4. Angular学习笔记--last_update 20151106

    参考来源:http://www.angularjs.cn/tag/AngularJS?p=1&s=50 基本要求:一周搞定33篇学习文章 目标:develop/refactor lms系统an ...

  5. ApacheCN Asp.NET 译文集 20211126 更新

    ASP.NET Core2 基础知识 零.前言 一.搭建舞台 二.控制器 三.视图 四.模型 五.验证 六.路由 七.RestBuy 八.添加功能.测试和部署 ASP.NET Core3 和 Angu ...

  6. 使用Angular CLI进行单元测试和E2E测试

    第一篇文章是: "使用angular cli生成angular5项目" : http://www.cnblogs.com/cgzl/p/8594571.html 第二篇文章是: & ...

  7. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  8. Angular企业级开发(2)-搭建Angular开发环境

    1.集成开发环境 个人或团队开发AngularJS项目时,有很多JavaScript编辑器可以选择.使用优秀的集成开发环境(Integrated Development Environment)能节省 ...

  9. 前端MVC学习总结(一)——MVC概要与angular概要、模板与数据绑定

    一.前端MVC概要 1.1.库与框架的区别 框架是一个软件的半成品,在全局范围内给了大的约束.库是工具,在单点上给我们提供功能.框架是依赖库的.AngularJS是框架而jQuery则是库. 1.2. ...

随机推荐

  1. 从零打造在线网盘系统之Struts2框架起步

    欢迎浏览Java工程师SSH教程从零打造在线网盘系统系列教程,本系列教程将会使用SSH(Struts2+Spring+Hibernate)打造一个在线网盘系统,本系列教程是从零开始,所以会详细以及着重 ...

  2. #pragma预处理命令详解

    #pragma预处理命令 #pragma可以说是C++中最复杂的预处理指令了,下面是最常用的几个#pragma指令: #pragma comment(lib,"XXX.lib") ...

  3. C++ Websites

    C++ Websites C++ 推荐网站 1.cprogramming.com 2.cppreference.com 3.cplusplus.com 4.Boost C++ Library

  4. Solutions for common Android development problems with the Eclipse IDE- Tutorial

    Table of Contents 1. Solving typical Android development problems 1.1. Clean Project 1.2. android.co ...

  5. android使用library

      http://www.vogella.com/tutorials/AndroidLibraryProjects/article.html     介绍support lib使用 http://de ...

  6. ssm所需要的pom(jre8、tomcat8、spring4)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. Codeforces Round #520 (Div. 2) Solution

    A. A Prank Solved. 题意: 给出一串数字,每个数字的范围是$[1, 1000]$,并且这个序列是递增的,求最多擦除掉多少个数字,使得别人一看就知道缺的数字是什么. 思路: 显然,如果 ...

  8. 【android】开发笔记系列:行为篇

    1:键盘遮挡了输入框 在androidManifest.xml里,对应的activity里设置键盘模式 <activity android:name="活动名称" andro ...

  9. java -- JVM的符号引用和直接引用

    在JVM中类加载过程中,在解析阶段,Java虚拟机会把类的二级制数据中的符号引用替换为直接引用. 1.符号引用(Symbolic References): 符号引用以一组符号来描述所引用的目标,符号可 ...

  10. 浅谈history对象以及路由插件原理

    简介 History对象最初设计用来表示窗口的浏览历史,但是,出于隐私方面的原因,History对象不再允许脚本访问已经访问过的实际URL.虽然,我们不清楚历史URL,但是,我们可以通过History ...