您好,欢迎访问一九零五行业门户网

JavaScript的测试

进行javascript重构时,我希望引入易于使用的测试框架来保证重构的顺利进行,未来能持续通过测试代码对javascript逻辑的正确性做保障。
jsunit (http://sourceforge.net/projects/jsunit/,http://www.jsunit.net/)
jsunit是一个独立的javascript单元测试框架,和junit差不多,没有上手难度,包括传统的setup和teardown,提供的assert方法也和junit类似,多了assertnan和assertundefined等等javascript特有的方法。测试页面必须在<head>里面引入jsunitcore.js这个js文件。
测试套件的支持:提供了addtestpage和addtestsuite;
测试日志的支持:包括warn、info和debug三种日志级别,前端编码不似后台代码,正式代码中不宜使用过多log,再说log也只有ff下才支持。
千言万语不及一个例子:
js代码 
<script language="javascript" src="jsunitcore.js"></script>  
<script language="javascript" src="play.js"></script> //模块js
function testwithmainprocess() {  
  assertequals(web play url, ##http://...##, webonlineplay());  
}
项目的代码里到处是ajax调用,要做单元测试,看来打桩是不可避免了。mock类的工具有许多,比如适合jquery的qmock:
js代码 
var mockjquery = new mock();  
mockjquery  
.expects(1)  
.method('ajax')  
.witharguments({  
  url: 'http://xxx,  
  success: function,  
  datatype: jsonp  
})  
.callfunctionwith({ feed : { entry : data response }});
这个桩正是mock了一个假的ajax jason返回:[feed:[entry:data response]],看看,使用就和以前接触过的easymock差不多嘛。
对于javascript测试框架感兴趣的同学还可以了解一些其他的测试框架,例如jspec。
单元测试代码建议就放在模块的包内:test.html,即便理想状况下,模块单独发布时,也是伴随着测试用例的可靠的前端代码。
从哪些javascript代码开始做?
1、函数式的代码。这样的代码保证独立性好,也不需要打什么桩,测试成本低,如果不明白函数式的代码的含义,请参见“函数式编程”。
2、复杂的逻辑。
是否尝试tdd?不建议在我们团队内部使用,前端tdd需要更高的技巧,对人的因素要求更高。如果有一天,后台java代码的tdd做好了,那么换成javascript的代码,没有本质区别。
如果效果得当,为什么不能把javascript的ut集成到icp-ci上作为持续集成的一部分呢?
其它类似信息

推荐信息