TEST:

  • Before you’ve written any of the code, you know how you want it to behave. You have a specification for its behavior.

为什么需要测试

  • 当我们给程序添加了新功能后,可以run test来判断,新代码是否破坏了原有的程序。
  • a well-writen test能帮助,其他开发者,更容易理清程序是如何工作的。

TDD: test-driven development

BDD:behavior-driven development

karma配置:

Karma 可以用来启动一个应用服务器,并在其中运行测试代码和需要被测试的源码,并把测试结果打印到命令行。

#1测试框架 jasmine:

suite 与 specs

  • 一个Suite(describe)包含多个Specs(it),一个Specs(it)包含多个断言(expect)。

    • npm install --save-dev karma-jasmine
    • jasmine 需要 required.js, karma init 时,是否需要required.js时,应该选 true。
    • Each spec should test only one case or scenario at a time.
Jasmine 细则
  1. describe('unit test main controller:',function(){
  2. describe('inner method',function(){})
  3. } )
  4. it('',function(){
  5. expect().toBe(true);
  6. })

匹配器

  • toBe 使用js的 === 来比较
  • toEqual
  • toMatch
  • toBeDefined
  • toBeUndefined
  • toBeNull
  • toBeTruthy
  • toBeFalsy
  • toBeContain 验证一个item是否是数组中的一项
  • toBeLessThan
  • toBeGreaterThan
  • toBeCloseTo ???
  • toThrow

高级匹配器

spy
  • toHaveBeenCalled:可以检查function是否被调用过,
  • toHaveBeenCalledWith: 可以检查传入参数是否被作为参数调用过。

beforeEach() 和 afterEach()

  • 带有一个函数作为参数,这个函数在没个细则(it)运行前/后 执行。

#2 Requirejs A JAVAScript module loader

  1. - requirejs
  2. - karma-requirejs

其他必须的依赖:

  1. - karma-chrome-launcher
  2. - karma-cli ????

Tips

这里karma环境一直配不好的一个重要原因是,对requirejs不熟悉

karma.config.js files应该注意的问题:

  • 顺序

    • 模式的顺序决定了文件在浏览器里被加载的顺序
    • 如果多个文件匹配到同一个模式,按字母顺序加载
    • 每个文件只被加载一次,如果多个模式匹配到同一个文件,由第一个匹配到的模式加载

angular.mock 模块

  • module() 函数允许我们指定测试中用到的特定模块
  • inject() 函数只负责一件事,就是将服务注入测试。

测试服务

测试控制器: 需要创建新的scope 和 控制器实例,并将它们连接起来。

mock对象和异步代码测试

  • $timeout.flush();

  • 10 10 2016 17:05:15.077:INFO [karma]: Delaying execution, these browsers are not ready: Chrome 53.0.2785 (Windows 10 0.0.0)

  • Chrome is executing

    • 出现上述两个error : 是因为没有karma init时 没有生成requirejs的 入口文件 test.main.js
  • Angular的依赖注入机制,是可测试的保障。当一个应用有很多的依赖关系时,怎么做单元测试呢?

    • 其实很简单,一个app能运行,它的依赖关系都是处理好的,我们在karma的files配置中,引入压缩好的js文件就ok了,不用再测试一个控制器时,再一个一个处理它的依赖关系。
  • 对应版本的Angular 要下载对应版本的angular-mocks.js ,不然会出现错误。

用Karma和Jasmine测试Angular应用的更多相关文章

  1. Karma和Jasmine自动化单元测试——本质上还是在要开一个浏览器来做测试

    1. Karma的介绍 Karma是Testacular的新名字,在2012年google开源了Testacular,2013年Testacular改名为Karma.Karma是一个让人感到非常神秘的 ...

  2. Karma:1. 集成 Karma 和 Jasmine 进行单元测试

    关于 Karma 会是一个系列,讨论在各种环境下,使用 Karma 进行单元测试. 本文讨论 karma 集成 Jasmine 进行单元测试. 初始化 NPM 实现初始化 NPM 包管理,创建 pac ...

  3. Karma和Jasmine自动化单元测试

    从零开始nodejs系列文章,将介绍如何利Javascript做为服务端脚本,通过Nodejs框架web开发.Nodejs框架是基于V8的引擎,是目前速度最快的Javascript引擎.chrome浏 ...

  4. Karma和Jasmine 自动化单元测试环境搭建

    最近初学AngularJS ,看到的一些教程中经常有人推荐使用Karma+Jasmine来进行单元测试.自己之前也对Jasmine有些了解,jasmine也是一个不错的测试框架. 1. karma介绍 ...

  5. karma和jasmine的测试(包括angular测试)

    本篇博客主要就是针对现在日新月异的技术和快速开发,测试被很多人忽略,其实在开发中如何保证代码的质量以及逻辑的完整性,测试显得十分重要,本文就是负责karma+jasmine来测试. 1.搭建测试的环境 ...

  6. 基于Karma和Jasmine的AngularJS测试

    1:工程目录结构 y@y:karma-t01$ tree -L 3.├── client│   ├── app│   │   └── user│   ├── bower_components│   │ ...

  7. 基于karma和jasmine的Angularjs 单元测试

    Angularjs 基于karma和jasmine的单元测试 目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否 ...

  8. Angularjs 基于karma和jasmine的单元测试

    目录: 1. 单元测试的配置 2. 实例文件目录解释 3. 测试controller     3.1 测试controller中变量值是否正确     3.2 模拟http请求返回值,测试$http服 ...

  9. karma、jasmine做angularjs单元测试

    引用文:karma.jasmine做angularjs单元测试 karma和jasmine介绍 <1>技术介绍 karma karma是Testacular的新名字 karma是用来自动化 ...

随机推荐

  1. c# AutoResetEvent和ManualResetEvent

    网上有很多AutoResetEvent和ManualResetEvent的详细介绍,在这里不做过多详细的解释,写下自己的一点心得留作备忘. AutoResetEvent和ManualResetEven ...

  2. CXF.bat

    @echo off rem ------------------------------------------------------------------- rem CXF Environmen ...

  3. AJAX实现无刷新验证用户名

    register.php <html> <head> <meta http-equiv="content-type" content="te ...

  4. 获取Exception的详细信息

    转自:http://blog.csdn.net/long95wang/article/details/8089489 方法一: public static String getExceptionAll ...

  5. Secondary Namenode - What it really do?

    原文链接:http://blog.madhukaraphatak.com/secondary-namenode---what-it-really-do/ Secondary Namenode is o ...

  6. C# SessionHelper

    using System.Web; using System.Web.SessionState; namespace Utils { /// <summary> /// Session帮助 ...

  7. C语言课程设计 Win32应用程序

    问题描述: 请设计一个职工信息管理程序,以方便人事部门对本单位职工的管理,该程序应该具有以下功 能: (1)能从键盘输入职工的信息 . (2)给定职工号,显示职工的信息. (3)给定工作部门,显示该部 ...

  8. Mysql 5.6 解压版配置方案

    # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/en/server-co ...

  9. jquery 自动触发事件 trigger

    trigger() 栗子: 需求:我们在做二级联动的时候往往会遇到这样的需求,后台管理端页面加载完成后显示用户的省份,城市,并且可以对用户的省份,城市信息可以修改 如果只是简单的显示 你完全可以直接放 ...

  10. CentOS单独编译安装PHP gd库扩展

    注意:如果您已经编译安装过GD库,请重新编译安装php不带gd库成功后,执行以下操作 安装libpng wget http://jaist.dl.sourceforge.net/project/lib ...