狠狠撸

狠狠撸Share a Scribd company logo
苏河
单元测试的目标

? 函数

? 对象的属性和方法

? 业务逻辑
代码可测试性的问题
?面向过程,过程嵌套
?太多的诲辞尘操作
? 展现逻辑和业务逻辑混淆
?闭包,匿名函数
? 异步操作
综上
? 面向过程,过程嵌套
? 太多的dom操作
? 展现逻辑和业务逻辑混淆
? 闭包
? 异步操作
? ……
? 如何提升可测试性?


?抽象
抽象的原则

? 代码细分职责,粒度化,达到单元和过程
分离的目的
抽象的原则
? 将数据处理和dom分开
抽象的原则

? 避免使用闭包,如果要使用,请公开测试
接口,减少匿名函数的使用
抽象的原则

? 异步调用的函数可以用waitsfor保证执行顺
 序
? 继续提升可测试性


?分层
1. 构建Js本地对象

             2. 处理数据逻辑

Javascript   3. 与 Server 通信

             4. 添加事件回调

             5. 操作DOM,BOM
DOM            BOM

                     Javascript

        UI
                       Control
      Model



      Server
MVC对象结构
View                        Control
 obj           obj    obj   instantia
                            tion

        obj          obj    process

                            bindEvent

                            …
Model
 obj          obj
                     obj
        obj
ViewObj
_Attr:value1
                        1. 获取DOM,BOM数据
AttrEl:someEl
                        2. 修改DOM和BOM
getUIData:function(){
       //…
}                       3. 处理展现层逻辑
setUI:function(){
      //…
}
ModelObj
                      1. 建立业务数据模型
_Attr1:value1

_Attr2:value2         2. 处理数据间的逻辑关系
_Method:function(){

}
       //…
                      3. 提供数据访问器
Method:function(){
      //…             4. 预留数据事件接口
}
Control              1. 对象实例化
Var objUI = new View();
Var obj = new Model();
                          2. 初始化
Function Process1(){
       //…
}                         3. 定义过程,实现view
Function Process2(){
       //…
}                          和model层对接
E.on(someEl,’event’,
process1);                4. 事件绑定
第二部分
? 基于kelude平台的自动化单元测试
?Q&A

More Related Content

Jasmine2