QWrap的js单元测试工具
2011-03-07 16:16
225 查看
在QWrap的js/_tools下面,有几个工具,还是挺实用的。
今天介绍一下单元测试工具。
QWrap的单元测试(unittest)工具,是基于jsspec(http://jania.pe.kr/aw/moin.cgi/JSSpec)的语法来的。其css也是完全照搬jsspec。
相对于jsspec,改变有:代码重构、弃用多次运行(仅对未通过的试例)策略、移去对原型的渲染、部分功能增删。
如何使用qwrap的jsspec:
<link rel="stylesheet" type="text/css" href="http://dev.qwrap.com/resource/js/_tools/unittest/JSSpec.css" />
<script type="text/javascript" src="http://dev.qwrap.com/resource/js/_tools/unittest/UnitTest.js"></script>
<script type="text/javascript" src="...自己的代码文件"></script>
<script>/*单元测试代码*/</script>
例如:
View Code
一个小问题:
由于qwrap的单元测试每个用户只跑一次,导致有时候在某些浏览器下,错误行号不是我们想要的。
所以在实际的应用中,可能会看到有的断言后面多了一个.line的尾巴:
value_of(a).should('<',3).line
它是解决行号不准的一个方案。不过某些编码规范检查工具会拒掉这种写法。可以改成“.toString()”来通过检查。
另:其实这里的主语Subject:
UnitTest.Subject=function (self){
this.self=self;
};
window.value_of=function (self){
return new UnitTest.Subject(self);
};
它也是一个QWrap里所说到的wrap(为了保护核对象(core)的纯净,在外面包一层皮(wrap))。不过,它的核的名字,不是叫qwrap所推荐的"core",而是叫"self"。
单元测试在QWrap的开发中,已经有很成熟的应用,如:
qwrap的core的单元测试:http://dev.qwrap.com/resource/js/core/_tests/UnitTest_Core.html
qwrap的core_dom_retouch单元测试:http://dev.qwrap.com/resource/js/dom/_tests/UnitTest_Dom.html
我们在修改代码后,都会运行一下单元测试,以确保以前的功能没有被改坏。
今天介绍一下单元测试工具。
QWrap的单元测试(unittest)工具,是基于jsspec(http://jania.pe.kr/aw/moin.cgi/JSSpec)的语法来的。其css也是完全照搬jsspec。
相对于jsspec,改变有:代码重构、弃用多次运行(仅对未通过的试例)策略、移去对原型的渲染、部分功能增删。
如何使用qwrap的jsspec:
<link rel="stylesheet" type="text/css" href="http://dev.qwrap.com/resource/js/_tools/unittest/JSSpec.css" />
<script type="text/javascript" src="http://dev.qwrap.com/resource/js/_tools/unittest/UnitTest.js"></script>
<script type="text/javascript" src="...自己的代码文件"></script>
<script>/*单元测试代码*/</script>
例如:
View Code
mix(Subject.prototype,{ _should: function(property,value,op,selfPre,selfTail,valuePre,valueTail,isReverse){ var selfDesc=[ selfPre, property==null?"self":"self[property]", selfTail ], valueDesc=[ valuePre, "value", valueTail ]; var desc=[].concat( isReverse?valueDesc:selfDesc, op, isReverse?selfDesc:valueDesc ); var sFun=desc.join(" "); //alert([sFun,this.self,property,value]); var tempCur={ self:this.self, property:property, value:value, sFun:sFun }; try{ var fun=new Function("self","property","value","return ("+sFun+");"); } catch(ex){//错误的调用了_should方法,造成matcher不合法 currentCaseStatus|=2; currentErrorMsg="Matcher is illegle: "+ex.message; currentShouldInfo=tempCur; return; } try{ var result=fun(this.self,property,value); } catch(ex){//运行matcher时抛错 currentCaseStatus|=4; currentErrorMsg="Not match: "+ex.message; currentShouldInfo=tempCur; return; } if(result !== true) {//Not Match currentCaseStatus|=4; currentErrorMsg="Not match"; currentShouldInfo=tempCur; return; } currentCaseStatus|=1;//Match return result; }, should: function (op,value){ return this._should(null,value,op); }, should_be: function (value){ return this._should(null,value,"==="); }, should_not_be: function (value){ return this._should(null,value,"!=="); }, should_have_method: function(methodName){ return this._should(methodName,"function","==","typeof"); }, should_have_property: function(property){ return this._should(null,property,"in",null,null,null,null,true); }, should_contains: function(value){ return this._should(null,value,".contains",null,null,"(",")"); }, property_should:function (property,op,value){ return this._should(property,value,op); }, property_should_be:function (property,value){ return this._should(property,value,"==="); }, property_should_not_be:function (property,value){ return this._should(property,value,"!=="); }, log: function(message){ Logger.log(this.self,message); } });
一个小问题:
由于qwrap的单元测试每个用户只跑一次,导致有时候在某些浏览器下,错误行号不是我们想要的。
所以在实际的应用中,可能会看到有的断言后面多了一个.line的尾巴:
value_of(a).should('<',3).line
它是解决行号不准的一个方案。不过某些编码规范检查工具会拒掉这种写法。可以改成“.toString()”来通过检查。
另:其实这里的主语Subject:
UnitTest.Subject=function (self){
this.self=self;
};
window.value_of=function (self){
return new UnitTest.Subject(self);
};
它也是一个QWrap里所说到的wrap(为了保护核对象(core)的纯净,在外面包一层皮(wrap))。不过,它的核的名字,不是叫qwrap所推荐的"core",而是叫"self"。
单元测试在QWrap的开发中,已经有很成熟的应用,如:
qwrap的core的单元测试:http://dev.qwrap.com/resource/js/core/_tests/UnitTest_Core.html
qwrap的core_dom_retouch单元测试:http://dev.qwrap.com/resource/js/dom/_tests/UnitTest_Dom.html
我们在修改代码后,都会运行一下单元测试,以确保以前的功能没有被改坏。
相关文章推荐
- 高效 JavaScript 单元测试工具----JsTestDriver
- 前端构建工具- gulp - 安装及简单CSS,JS文件合并压缩
- 自己的JS调试工具 myLogger()对象
- 很棒的在线裁图工具jQuery1.4.2 + jquery.bitmapcutter.js + BitmapCutter.Core+的完美配合
- vue教程3-04 vue.js vue-devtools 调试工具的下载安装和使用
- 开放源码 C/C++ 单元测试工具,第 2 部分: 了解 CppUnit
- JS-在线运行代码小工具
- 【代码美化】CSS代码格式化和JS代码格式化工具
- JS跨浏览器事件工具之:EventUtil完整源码
- Node.js 小工具--supervisor
- Node.js:常用工具、路由
- NTVS:把Visual Studio变成Node.js IDE的工具 搜集资料。
- js工具与开发库
- JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具
- ie下js调试超级爽的工具IE WebDeveloper V2 (附注册码)
- 用JAVA写了一个简单的JS代码格式化工具
- 带你入门带你飞Ⅰ 使用Mocha + Chai + Sinon单元测试Node.js
- js 时间戳差 转日(天)时分秒 倒计时工具插件
- 单元测试工具及其优缺点对比