SlideShare une entreprise Scribd logo
1  sur  22
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

Contenu connexe

Similaire à Java script测试之js unit ut

Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
Wen Liao
 
Phpunit入门 r2
Phpunit入门 r2Phpunit入门 r2
Phpunit入门 r2
Baohua Cai
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
netdbncku
 
JS单元测试之路
JS单元测试之路JS单元测试之路
JS单元测试之路
Jeaf Wang
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
bj_qa
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formal
jameslabs
 
香港六合彩
香港六合彩香港六合彩

Similaire à Java script测试之js unit ut (20)

Testing in python 2.7.3
Testing in python 2.7.3Testing in python 2.7.3
Testing in python 2.7.3
 
Phpunit入门 r2
Phpunit入门 r2Phpunit入门 r2
Phpunit入门 r2
 
Foundation of software development 1
Foundation of software development 1Foundation of software development 1
Foundation of software development 1
 
JS单元测试之路
JS单元测试之路JS单元测试之路
JS单元测试之路
 
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
Efficient JavaScript Unit Testing (Chinese Version), JavaOne China 2013
 
JavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization SkillsJavaScript 80+ Programming and Optimization Skills
JavaScript 80+ Programming and Optimization Skills
 
單元測試
單元測試單元測試
單元測試
 
Unit testing
Unit testingUnit testing
Unit testing
 
jasmine入门指南
jasmine入门指南jasmine入门指南
jasmine入门指南
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
Maintainable Javascript
Maintainable JavascriptMaintainable Javascript
Maintainable Javascript
 
PHPUnit 入門介紹
PHPUnit 入門介紹PHPUnit 入門介紹
PHPUnit 入門介紹
 
Hands on data analysis 101
Hands on data analysis 101Hands on data analysis 101
Hands on data analysis 101
 
LabView with Lego NXT
LabView  with Lego NXTLabView  with Lego NXT
LabView with Lego NXT
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
 
Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)Legacy code 讀書會 1st (Ch1 - Ch5)
Legacy code 讀書會 1st (Ch1 - Ch5)
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formal
 
TypeScript 綜合格鬥技
TypeScript 綜合格鬥技TypeScript 綜合格鬥技
TypeScript 綜合格鬥技
 
香港六合彩
香港六合彩香港六合彩
香港六合彩
 

Plus de fangdeng

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

Plus de fangdeng (20)

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

Java script测试之js unit ut