Java script测试之js unit ut
Upcoming SlideShare
Loading in...5
×
 

Java script测试之js unit ut

on

  • 1,254 views

 

Statistics

Views

Total Views
1,254
Views on SlideShare
1,149
Embed Views
105

Actions

Likes
2
Downloads
6
Comments
0

2 Embeds 105

http://wd.alibaba-inc.com 103
http://www.slidesharenet.org 2

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Java script测试之js unit ut Java script测试之js unit ut Presentation Transcript

  • JavaScript Testing之 JSUnit UTCBU-技术部-商业产品开发部- 前端组
  • 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 checksthe correctness of some assumptions afterward.If the assumptions turn out to be wrong, the unittest 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