日期:2014-05-16  浏览次数:20421 次

Eclipse中使用JstestDriver+Jasmine搭建javascript单元测试环境

在进行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 and base_path now accept multiple base paths.

但配置文件说明部分没有并于basePath的说明,我也没有试出来怎么用

2、JsTestDriver.conf文件加载文件时,我只知道加载下级目录,不知道能不能实现加载上级目录中的文件。

 

因我也是才完成这个单元测试环境不久,如有错误,欢迎指正。更欢迎有兴趣的同行一直交流探讨。