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...

  1. 1