日期:2014-05-16 浏览次数:20443 次
在进行Web开发的过程中,javascript的单元测试一直是比较难以处理的问题,主要是因为对单元测试的重视程度不足,而且单元测试要花费比较多的精力,另外一个原因是没有一个合适的单元测试环境。
在Eclipse中使用Extjs进行Web开发的过程中,我一直想把Javascript的单元测试环境搭建起来。先后找到JsTestDriver和Jasmine,它们各有专长。JsTestDriver可在开发环境下快速的执行单元测试(参见:我的另外两个博客:单元测试101:你测试你的javascript吗?和测试驱动JavaScript开发实战),而Jasmine擅长BDD。可怎么能eclipse环境中把两者结合起来,应用两者的特长呢?经过不断的查资料和尝试,最终成功的把二者同时应用于eclipse的javascript单元测试环境。下面记录这个环境搭建的过程。
首先搭建起来eclipse的JsTestDriver的单元测试环境,eclipse有eclipse自动更新插件,地址为:http://js-test-driver.googlecode.com/svn/update。自动安装插件后,根据自己需要,创建测试目录,创建JsTestDriver配置文件jsTestDriver.conf(是文本文件,但文件名必须是这个名,),点击运行配置:
选择要测试的项目和刚才创建conf文件。JsTestDriver.conf配置主要包括:
server: http://servername:port load: - 源文件目录/*.js #也可以指定具体文件名 - 源文件目录2/*.js #可同时添加多个文件或目录 test: - 测试目录/*.js - 测试目录2/*.js
更多的配置说明见:http://code.google.com/p/js-test-driver/wiki/ConfigurationFile
这里JsTestDriver已经搭建好了,写个测试看看?
新建一个js测试文件:
TestCase("MyFirstJavaScriptTest",{ "test my first javascript test with jsTestDriver in eclipse":function(){ assertTrue(true); }, "test with Ext":function(){ var v = Ext.JSON.decode("{value:'good'}"); assertEquals(v['value'],'good'); } });
切换到JsTestDriver测试窗口,如下:
点JsTestDriver窗口右上角的绿三角开始运行,点工具栏上不同的浏览器,打开测试浏览器。运行起来,测试通过后的状态如下:
然后再说怎么让jasmine和JsTestDriver搭配,因jasmine是纯javascript的单元测试库,把jasmine库文件复制到testlib/jasmine(目录自由指定)目录下,并在jsTestDriver.conf文件中把该下的文件加到load配置项下。这时可以写jasmine的单元测试,但jsTestDriver并不执行这些测试。要想让让jsTestDriver执行jasmine写的测试,还需要一个适配器:Jasmine-jstd-Adapter.js,代码去:https://github.com/ibolmo/jasmine-jstd-adapter/blob/master/src/JasmineAdapter.js复制。并把这个文件加到jsTestDriver的配置文件加载目录中,这时已经完成了Eclipse的jsTestDriver+Jasmine javascript单元测试环境配置。
遗留问题:
1、JsTestDriver开发说明上说,1.3.4-a的版本已经支持特性:
但配置文件说明部分没有并于basePath的说明,我也没有试出来怎么用
2、JsTestDriver.conf文件加载文件时,我只知道加载下级目录,不知道能不能实现加载上级目录中的文件。
因我也是才完成这个单元测试环境不久,如有错误,欢迎指正。更欢迎有兴趣的同行一直交流探讨。