YUI发布YUI Test1.0.0 beta2版本
作者:kun10 发布时间:May 1, 2011 分类:JavaScript
原文地址:here
译者:qiaofu
去年我们发布了YUI test 的1.0beta1版本,之后我们便进行了反馈的收集,bug的修补以及补充新特性。今天我很高兴的宣布我们的beta2版本也发布了,这将是我们在通用版本前的最后一个版本。新的beta2版本的发布拥有一些新的核心功能,例如对Node.js的初步支持。所有的这一切都是为了创建一个更完整的测试解决方案,方便你在任何地方进行javascript的测试。
核心的变化
基于来自YUI社区的反馈,我们对YUI Test的核心做了一些补充。首先是加入了测试用例对象的初始化(init())和销毁的方法(destroy()),而在此之前,我们一直用setUp和tearDown来做数据的初始化和销毁。在传统的xUnit形式的测试框架中,setUp用来在每一个测试前运行,而tearDown则是运行于每一个之后。init和destroy则是分别运行于测试用例对象中所有setUp()方法之前和tearDown方法之后,并都只运行一次。这两个方法有利于管理整个贯穿于整个用例对象的数据。例如:
var testCase = new YUITest.TestCase({
name: "TestCase Name",
//---------------------------------------------
// init and destroy
//---------------------------------------------
init : function () {
this.data = {
name : "Nicholas",
age : 28
};
},
destroy : function () {
delete this.data;
},
//---------------------------------------------
// Tests
//---------------------------------------------
testName: function () {
YUITest.Assert.areEqual("Nicholas", this.data.name, "Name should be 'Nicholas'");
},
testAge: function () {
YUITest.Assert.areEqual(28, this.data.age, "Age should be 28");
}
});
另一个变化是“上下文数据”(context data)特性的引入。当一个测试(testRunner)开始,他会创建一个对象,这个对象会被传递到每一个init方法、setUp方法、destroy方法以及tearDown方法和test方法里面,默认情况这个对象是空的。你可以利用他在多个测试用例对象和方法之间共享一些数据。例如:
var testSuite = new YUITest.TestSuite({
name: "Test Suite Name",
setUp: function(data){
data.topLevel = 1;
}
});
testSuite.add(new YUITest.TestCase({
name: "First Test Case",
init: function(data){
data.foo = "bar";
},
testValueOfFoo : function (data) {
YUITest.Assert.areEqual("bar", data.foo);
//数据来自init
},
testValueOfTopLevel: function(data){
YUITest.Assert.areEqual(1, data.topLevel);
//数据来自测试套件
}
});
testSuite.add(new YUITest.TestCase({
name: "Second Test Case",
testValueOfFoo : function (data) {
YUITest.Assert.areEqual("bar", data.foo);
//数据来自第一个测试用例的init
},
testValueOfTopLevel: function(data){
YUITest.Assert.areEqual(1, data.topLevel);
//数据来自测试套件
}
});
当然最关键的一点,如何使用好上下文数据取决于你自己,即便不用它你也可以很好的完成测试的工作。
针对Node.js的YUI Test
在YUI test beta2里面,我们增加了对Node.js的支持,你可以利用如下命令安装
~:npm install yuitest
一旦安装完成,你就可以传入测试文件和被测试文件的路径,进行测试。
~:yuitest testfile.js path/to/test
在浏览器中写javascript测试和在Node.js里面写javascript测试的区别在于,浏览器端的js测试,你需要在测试页面中引入yui test文件,Nodejs中你需要require引入YUItest。而利用一下的形式你可以在浏览器端和Node.js端用同一套脚本
(function(){
//define local version of YUITest based on what's available.
var YUITest = this.YUITest || require("yuitest");//引入YUITest,这句是关键
var testCase = new YUITest.TestCase({
//test case details
});
YUITest.TestRunner.add(testCase);
})();
如果是浏览器端引入yuitest文件,那么this.YUITest应该会指向window对象下面的YUITest,否则就是用NodeJs的require方式来引入yuitest。
不过有一点要注意的是,Node.js环境里面并没有Dom,因此dom部分很可能在node.js下面抛出异常(译者YY:这一点或许安装了Node.js的jsdom会解决问题)
展望通用版本
要达到GA版本我们还有很多要做,还有很多的bug要修复,定制更好的说明文档以及跟进社区里面提及的重要点。blablabla...