SlideShare a Scribd company logo
JavaScript Testing之
       JSUnit UT


CBU-技术部-商业产品开发部-
       前端组
Agenda:
•   什么是UT
•   前端为什么需要UT
•   UT的基础
•   UT的框架选型
•   怎么写UT
•   我们遇到的问题及如何解决的
•   QA
                    30mins+
什么是UT?


             A




         B
                 C
3步
     •   Set Up
     •   Prepare an input
     •   Call a method
     •   Check an output
     •   Tear down

     t.test_methodA=function(){
        var input={some input value};
        var output=A(input);
       jsunit.assertEquals(output,expectValue);
     }
A unit test is a piece of a code (usually a method)
that invokes another piece of code and checks
the correctness of some assumptions afterward.
If the assumptions turn out to be wrong, the unit
test has failed.

A “unit” is a method or function.
UT should be : Automated, trustworthy, readable,
and maintainable.
前端为什么需要UT?

 前端逻辑复杂化
 设备多样化/前端环境复杂化
 前端开发模块化
 前端组件重用化



  减少Bug数目,提高前端的代码质量,
        规范前端编码
单元测试元素的组成
✦ Test Suite
  ✦ Tests
     ✦ Assertions
  ✦ Async Tests
✦ Test Runner
Assertions


✦assert([comment], booleanValue)
✦ assertTrue([comment], booleanValue)
✦ assertFalse([comment], booleanValue)
✦ assertEquals([comment], value1, value2)
✦ assertNotEquals([comment], value1, value2)
✦ assertNull([comment], value)
✦ assertNotNull([comment], value)
  …
• More http://www.jsunit.net/documentation/
Tests
 t.testEval3 =function(){
       jsunit.assertEquals(4, eval("2 + 3"));
  };
  t.testEval4 = function() {
       var a=function(){};
       jsunit.assertTypeOf(a, "function");
  };
TestRunner
UT框架的选择

   JSUnit   QUnit   …
JSunit VS QUnit
              JSUnit            QUnit
运行是否方便        不太方便,需要运行         很方便,写完,刷新,即
              testRunner        可运行

语法风格          还是2000年时候的,有点 比较语义化,有module的
              过时            概念
是否支持异步        不支持,需要使用          支持,使用start ,stop等
              setTimeOut等来解决
是否支持Ant       支持                不支持
是否可以CI        可以,Hudson有现成的插 不支持,输出的结果带
              件              html标签,john设计时就
                             没考虑这个

是否适合大型或多个项目   比较适合,有testsuit和   多个项目,有点混乱
              testpage概念

远程控制          支持                不支持
为什么选择JSUnit
• JSUnit设计理念源于Junit,后端的开发同学容
  易接受
• Ant, CI,多项目的支持
语法改造
• Ali.test.jsunit.defineTests("ali.ux.logging", function(t, js
  unit) {
    jsunit.require("logger/js/logging.js");
    t._setUp = function() {
       //todo
   };
   t._tearDown = function() {
       //todo
   };

• });
异步支持
t.testAsyncCall=function(){
   jQuery.ajax({
         url:
         jsunit.TEST_BASE+"wxb/data/data.json",       success:t.asy
         ncCallback(function(obj){
          jsunit.assertEquals(1,obj.data.userType);
           }),
         dataType: "json"
   });
};
t.testAsyncCall._async=true;
怎样写?
Demo
问题列表
前端单元测试能带给我们什么?
 1: 产品的功能性描述
 2: API的浏览器兼容性测试
 3: 重要bug的fix测试
 4: 添加新功能,是否影响老功能的测试
 5: 产品的可维护性更好
在编写代码过程过,对于可测性,有个很重
要的问题,就是有的私有函数,为了安全
性,用闭包来封装,断绝其和外界的访问,
但这就给可测性带来了问题。

方案: 在编写代码时,需要测试的方法,
我们可以使用_testName来定义其为私有函
数,然后使用@aliobf-clobber等这些meta-
data来描述,类似于Google guice的方式。
使用ant和Java方式来解决。
什么样的项目适合做单元测试?
 ✦需要JS处理业务逻辑 (Heavy JavaScript
 APP )
 ✦后台拿到数据后,需要对数据进行处理的
 ✦前端面向对象编程,而且最好logic和view
 是分开的。
什么样的项目不适合做单元测试?
单纯的从后端拿到数据,然后显示的项目
QA

More Related Content

PPT
Java单元测试
PPT
GTest交流与经验总结
PPTX
Ecma script3
PPTX
Chapter 4 conditionals and loops
DOC
Milkyway wiring harness private limited profile
PDF
Jodo Mission of Hawaii Bulletin - April 2015
PPTX
JS单元测试之路
PPTX
jasmine入门指南
Java单元测试
GTest交流与经验总结
Ecma script3
Chapter 4 conditionals and loops
Milkyway wiring harness private limited profile
Jodo Mission of Hawaii Bulletin - April 2015
JS单元测试之路
jasmine入门指南

More from fangdeng (20)

PDF
jQuery底层架构
PDF
Building an event driven web
PPTX
浅尝jQuery
PPTX
Html基础培训
PPT
前端开发之Js
PPTX
Javascript代码注释及文档生成
PPTX
J engine -构建高性能、可监控的前端应用框架
PPT
前端单元测试初体验
PDF
2011年方凳年度总结及颁奖
PDF
产品线中的思考
PPTX
产品线中的思考
PPTX
Postoffer前端架构设计
PPTX
Varnish简介
PDF
Websocket
PPT
Let's talk about date in javascript
PDF
Test driven-frontend-develop
PDF
方凳良品1期
PDF
方凳良品2期
PPT
魏琪君-重构-关于可读性、原则和模式
PPTX
Datalazyload
jQuery底层架构
Building an event driven web
浅尝jQuery
Html基础培训
前端开发之Js
Javascript代码注释及文档生成
J engine -构建高性能、可监控的前端应用框架
前端单元测试初体验
2011年方凳年度总结及颁奖
产品线中的思考
产品线中的思考
Postoffer前端架构设计
Varnish简介
Websocket
Let's talk about date in javascript
Test driven-frontend-develop
方凳良品1期
方凳良品2期
魏琪君-重构-关于可读性、原则和模式
Datalazyload
Ad

Recently uploaded (20)

PPTX
3分钟读懂拉夫堡大学毕业证LU毕业证学历认证
PDF
黑客出手,分数我有!安全可靠的技术支持,让你的GPA瞬间提升,留学之路更加顺畅!【微信:viphuzhao】
DOC
ATU毕业证学历认证,伍赛斯特大学毕业证毕业证书样本
PPTX
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
PPTX
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
PPTX
学校原版弗吉尼亚大学毕业证UVA毕业证原版一比一
PPTX
学校原版加利福尼亚大学戴维斯分校毕业证UCD毕业证原版一比一
PPTX
模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板
PPTX
学校原版克莱姆森大学毕业证Clemson毕业证原版一比一
PPTX
3分钟读懂伦敦政治经济学院毕业证LSE毕业证学历认证
PPTX
学校原版加州大学戴维斯分校毕业证UCD毕业证原版一比一
PPTX
3分钟读懂伦敦大学学院毕业证UCL毕业证学历认证
PPTX
3分钟读懂诺里奇艺术大学毕业证NUA毕业证学历认证
PPTX
3分钟读懂纽曼大学毕业证Newman毕业证学历认证
PPTX
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
PPTX
3分钟读懂曼彻斯特城市大学毕业证MMU毕业证学历认证
PPTX
学校原版明尼苏达大学毕业证UMN毕业证原版一比一
PPTX
3分钟读懂佩珀代因大学毕业证Pepperdine毕业证学历认证
PPTX
学校原版杜克大学毕业证Duke毕业证原版一比一
PPTX
3分钟读懂南安普顿大学毕业证Soton毕业证学历认证
3分钟读懂拉夫堡大学毕业证LU毕业证学历认证
黑客出手,分数我有!安全可靠的技术支持,让你的GPA瞬间提升,留学之路更加顺畅!【微信:viphuzhao】
ATU毕业证学历认证,伍赛斯特大学毕业证毕业证书样本
3分钟读懂索尔福德大学毕业证Salford毕业证学历认证
3分钟读懂贝尔法斯特女王大学毕业证QUB毕业证学历认证
学校原版弗吉尼亚大学毕业证UVA毕业证原版一比一
学校原版加利福尼亚大学戴维斯分校毕业证UCD毕业证原版一比一
模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板模板
学校原版克莱姆森大学毕业证Clemson毕业证原版一比一
3分钟读懂伦敦政治经济学院毕业证LSE毕业证学历认证
学校原版加州大学戴维斯分校毕业证UCD毕业证原版一比一
3分钟读懂伦敦大学学院毕业证UCL毕业证学历认证
3分钟读懂诺里奇艺术大学毕业证NUA毕业证学历认证
3分钟读懂纽曼大学毕业证Newman毕业证学历认证
3分钟读懂利物浦约翰摩尔大学毕业证LJMU毕业证学历认证
3分钟读懂曼彻斯特城市大学毕业证MMU毕业证学历认证
学校原版明尼苏达大学毕业证UMN毕业证原版一比一
3分钟读懂佩珀代因大学毕业证Pepperdine毕业证学历认证
学校原版杜克大学毕业证Duke毕业证原版一比一
3分钟读懂南安普顿大学毕业证Soton毕业证学历认证
Ad

Java script测试之js unit ut