Jasmine2

Preview:

Citation preview

苏河

单元测试的目标

• 函数

• 对象的属性和方法

• 业务逻辑

代码可测试性的问题

•面向过程,过程嵌套

•太多的dom操作

• 展现逻辑和业务逻辑混淆

•闭包,匿名函数

•异步操作

综上

• 面向过程,过程嵌套

• 太多的dom操作

• 展现逻辑和业务逻辑混淆

• 闭包

• 异步操作

• ……

• 如何提升可测试性?

•抽象

抽象的原则

• 代码细分职责,粒度化,达到单元和过程

分离的目的

抽象的原则

• 将数据处理和dom分开

抽象的原则

• 避免使用闭包,如果要使用,请公开测试

接口,减少匿名函数的使用

抽象的原则

• 异步调用的函数可以用waitsfor保证执行顺

• 继续提升可测试性

•分层

Javascript

1.构建Js本地对象

2.处理数据逻辑

3.与 Server 通信

4.添加事件回调

5.操作DOM,BOM

BOM

UI

Model

DOM

Javascript

Server

Control

View Control

Model

obj

obj obj

obj

obj

obj

obj obj

obj instantia

tion

process

bindEvent

MVC对象结构

ViewObj

_Attr:value1

AttrEl:someEl

getUIData:function(){

//…

}

setUI:function(){

//…

}

1.获取DOM,BOM数据

2.修改DOM和BOM

3.处理展现层逻辑

ModelObj

_Attr1:value1

_Attr2:value2

_Method:function(){

//…

}

Method:function(){

//…

}

1.建立业务数据模型

2.处理数据间的逻辑关系

3.提供数据访问器

4.预留数据事件接口

Control

Var objUI = new View();

Var obj = new Model();

Function Process1(){

//…

}

Function Process2(){

//…

}

E.on(someEl,’event’,

process1);

1.对象实例化

2.初始化

3.定义过程,实现view

和model层对接

4.事件绑定

第二部分

• 基于kelude平台的自动化单元测试

•Q&A