23
苏河

Jasmine2

Embed Size (px)

Citation preview

Page 1: Jasmine2

苏河

Page 2: Jasmine2

单元测试的目标

• 函数

• 对象的属性和方法

• 业务逻辑

Page 3: Jasmine2

代码可测试性的问题

Page 4: Jasmine2

•面向过程,过程嵌套

Page 5: Jasmine2

•太多的dom操作

Page 6: Jasmine2

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

Page 7: Jasmine2

•闭包,匿名函数

Page 8: Jasmine2

•异步操作

Page 9: Jasmine2

综上

• 面向过程,过程嵌套

• 太多的dom操作

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

• 闭包

• 异步操作

• ……

Page 10: Jasmine2

• 如何提升可测试性?

•抽象

Page 11: Jasmine2

抽象的原则

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

分离的目的

Page 12: Jasmine2

抽象的原则

• 将数据处理和dom分开

Page 13: Jasmine2

抽象的原则

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

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

Page 14: Jasmine2

抽象的原则

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

Page 15: Jasmine2

• 继续提升可测试性

•分层

Page 16: Jasmine2

Javascript

1.构建Js本地对象

2.处理数据逻辑

3.与 Server 通信

4.添加事件回调

5.操作DOM,BOM

Page 17: Jasmine2

BOM

UI

Model

DOM

Javascript

Server

Control

Page 18: Jasmine2

View Control

Model

obj

obj obj

obj

obj

obj

obj obj

obj instantia

tion

process

bindEvent

MVC对象结构

Page 19: Jasmine2

ViewObj

_Attr:value1

AttrEl:someEl

getUIData:function(){

//…

}

setUI:function(){

//…

}

1.获取DOM,BOM数据

2.修改DOM和BOM

3.处理展现层逻辑

Page 20: Jasmine2

ModelObj

_Attr1:value1

_Attr2:value2

_Method:function(){

//…

}

Method:function(){

//…

}

1.建立业务数据模型

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

3.提供数据访问器

4.预留数据事件接口

Page 21: Jasmine2

Control

Var objUI = new View();

Var obj = new Model();

Function Process1(){

//…

}

Function Process2(){

//…

}

E.on(someEl,’event’,

process1);

1.对象实例化

2.初始化

3.定义过程,实现view

和model层对接

4.事件绑定

Page 22: Jasmine2

第二部分

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

Page 23: Jasmine2

•Q&A