对JavaScript进行单元测试的工具(3)

发表于:2012-11-29来源:IBM作者:不详点击数: 标签:JavaScript
该示例移动了设置部分的断言所使用的值,以避免在测试的逻辑中使用这些值。 QUnit 还通过 asyncTest() 函数提供对异步测试的支持,如果您使用 Asynchronou

  该示例移动了设置部分的断言所使用的值,以避免在测试的逻辑中使用这些值。

  QUnit 还通过 asyncTest() 函数提供对异步测试的支持,如果您使用 Asynchronous JavaScript and XML (Ajax),这是非常有用的特性。在这样的环境中,expect() 函数可以让你轻松地验证测试中运行的断言数量。

  回页首

  YUI Test:独立的单元测试模块

  YUI Test 是 YUI 库(Yahoo!)的一个组件,是一个可扩展而完整的单元测试框架。如果要使用 YUI Test,需要:

  将 YUI 导入 HTML 运行程序,如下所示。

<script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js"></script> 

  如以上代码所示,此样例使用了 YUI Test 第 3 版本。

  在测试脚本文件中,实例化 YUI 函数。加载所需的模块,test 和 console,如清单 11 所示。

  清单 11.下载 test 和 console YUI 模块

				
YUI().use("test", "console", function (Y) {
     // Test cases go here
});

  test 模块显然是用于测试的。console 模块并不是强制性的,但本示例将用它来打印结果。测试用例将会进入回调中,并以全局的 Y 实例作为参数。

  YUI Test 使用 Y.Test.Case() 构造函数实例化新测试用例,使用 Y.Test.Suite() 构造函数来实例化测试套件。测试套件与 JUnit 类似,包含若干个测试用例。可以使用 add() 方法将测试用例添加到测试套件中。

  我们使用 YUI test 重新测试 清单 5 中的源代码。清单 12 显示了如何创建测试用的套件和测试用例。

  清单 12. 测试套件和用例

				
YUI().use("test", "console", function (Y) {
	
     var suite = new Y.Test.Suite("Temperature conversion suite");

     //add a test case
     suite.add(new Y.Test.Case({
         name:"Temperature conversion?
     )); 
});

  清单 12 生成了一个名为 Temperature conversion suite 的套件和一个名为 Temperature conversion 的测试用例。现在,可以将测试方法写入对象文本中,作为参数传递给 Y.Test.Case 构造函数,如清单 13 所示。

  清单 13. 测试用例与测试方法

				
suite.add(new Y.Test.Case({
    name:"Temperature conversion",

    setUp : function () {
        this.celsius1 = 20;
        this.celsius2 = 30;
		
        this.fahrenheit1 = 68;
        this.fahrenheit2 = 86;
    },

    testConversionCtoF: function () {
        Y.Assert.areEqual(this.fahrenheit1,         
convertFromCelsiusToFahrenheit(this.celsius1));
        
        Y.Assert.areEqual(this.fahrenheit2, 
convertFromCelsiusToFahrenheit(this.celsius2));
    },
		
    testConversionFtoC: function () {
        Y.Assert.areEqual(this.celsius1,
convertFromFahrenheitToCelsius(this.fahrenheit1));
			
        Y.Assert.areEqual(this.celsius2, 
convertFromFahrenheitToCelsius(this.fahrenheit2));
    }
}));

  您可能注意到,在清单 13 中:

  可使用 setUp() 方法。YUI Test 在测试用例和测试套件层提供了 setUp() 和 tearDown() 方法。

  测试方法名以 test 单词开头,它们包含断言。

  本示例使用 Y.Assert.areEqual() 断言类型,它与 QUnit 中的 equal() 函数类似。

  YUI Test 为断言提供了多种方法,如:

  Y.Assert.areSame(),它类似于 QUnit 中的 strictEqual()。

  数据类型断言(Y.Assert.isArray()、Y.Assert.isBoolean()、Y.Assert.isNumber() 等等)。

  特殊值断言(Y.Assert.isFalse()、Y.Assert.isNaN()、Y.Assert.isNull() 等等)。

  要启动 YUI 中的测试,需要使用 Y.Test.Runner 对象。还需要将套件或测试用例添加到对象中,然后调用 run() 方法来运行测试。清单 14 显示了如何运行 清单 13 中创建的测试。

  清单 14. 运行 YUI test

				
Y.Test.Runner.add(suite);
Y.Test.Runner.run();

  在默认情况下,结果会打印在浏览器的控制台中(如果浏览器支持控制台的话)。更好的方法是使用 Yahoo! Console 组件来打印结果。如果要使用 Yahoo! Console 组件,需要采用 Y.Console 构造函数将控制台绑定到 HTML 运行程序的 DOM 元素中,如清单 15 所示。

  清单 15. Yahoo! Console

				
var console = new Y.Console({
    verbose: true,
    newestOnTop: false,
    width:"600px"
});

console.render('#testLogger');

原文转自:http://www.ltesting.net