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

发表于:2012-11-29来源:IBM作者:不详点击数: 标签:JavaScript
清单 5. 转换 (qunit/js/script.js) function convertFromCelsiusToFahrenheit(c){ var f = c * (9/5) + 32; return f;}function convertFromFahrenheitToCelsius(f){ var c = (f - 32) * (5/9); return c;} 清单

  清单 5. 转换 (qunit/js/script.js)

				
function convertFromCelsiusToFahrenheit(c){
    var f = c * (9/5) + 32;
    return f;
}

function convertFromFahrenheitToCelsius(f){
    var c = (f - 32) * (5/9);
    return c;
}

  清单 6 显示了各自的测试用例。

  清单 6. 测试用例 (qunit/js/test.js)

				
module ("Temperature conversion")

test("conversion to F", function(){
    var actual1 = convertFromCelsiusToFahrenheit(20);
    equal(actual1, 68, ?Value not correct?);
	
    var actual2 = convertFromCelsiusToFahrenheit(30);
    equal(actual2, 86, ?Value not correct?);
})

test("conversion to C", function(){
    var actual1 = convertFromFahrenheitToCelsius(68);
    equal(actual1, 20, ?Value not correct?);

    var actual2 = convertFromFahrenheitToCelsius(86);
    equal(actual2, 30, ?Value not correct?);
})

  QUnit 中的测试用例由 test() 方法定义。逻辑是包含在传入函数的第二个参数中。在清单 6 中,两个测试分别名为 conversion to F 和 conversion to C。每个测试包含两个断言。该测试中的断言使用了 equal() 方法。equal() 函数可以将预期值与测试函数的实际值相比较。equal() 方法中的第三个参数是错误情况下显示的消息。

  还可以通过 module() 函数将测试组织到模块中。在清单 6 中,Temperature conversion 模块含有这两个测试。

  如果要运行测试:

  在 HTML 运行程序中包含源代码和测试文件,如清单 7 所示。

  在浏览器中打开页面。

  清单 7. 在运行程序中包含 script.js 和 test.js

				
...<script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript" src="js/test.js"></script>
...

  图 1 显示了 QUnit 如何在浏览器 (Firefox) 中显示结果。

  图 1. QUnit 结果

屏幕截图显示 4 个测试都成功了。

  清单 6 中的断言使用了 equal() 方法,但它不是 QUnit 提供的惟一断言。QUnit 提供的其他断言包括 ok() 或 strictEqual()。清单 8 显示了正在执行的方法。

  清单 8. 更多的断言

				
module ("Other assertion");
test("assertions", function(){
    ok(true);
    ok(3);
    strictEqual("c", "c");
    equal (3, "3");
});

  ok() 函数检查第一个参数为 true;strictEqual() 验证第一个参数严格等于第二个参数。在这些代码背后,strictEqual() 使用了 === 运算符,equal() 使用了 == 运算符。

  如果测试失败,QUnit 还提供了有用的信息。将清单 8 中的代码改成清单 9 中的代码,让上一次断言执行失败。

  清单 9. 上一次断言出现的错误

				
module ("Other assertion");
test("assertions", function(){
    ok(true);
    ok(3);
    strictEqual("c", "c");
    strictEqual (3, "3");
});

  图 2 显示了 QUnit 执行清单 9 代码所返回的结果。

  图 2. QUnit 结果:上次测试失败

屏幕截图显示 8 个测试中 7 个成功,一个失败。

  结果非常详细,而且很容易查到上次断言的预期值与实际值有什么不同。

  QUnit 另一项特性能让您在模块中的所有测试执行之前或之后执行命令。module() 函数接受 setup() 和 teardown() 回调作为第二个参数。使用 setup() 函数更新 清单 6,如清单 10 所示。

  清单 10. setup() (qunit/js/test-setup.js)

				
module ("Temperature conversion", {
    setup : function() {
        this.celsius1 = 20;
        this.celsius2 = 30;
		
        this.fahrenheit1 = 68;
        this.fahrenheit2 = 86;
    }
});
test("conversion to F", function(){
    var actual1 = convertFromCelsiusToFahrenheit(this.celsius1);
    equal(actual1, this.fahrenheit1);
	
    var actual2 = convertFromCelsiusToFahrenheit(this.celsius2);
    equal(actual2, this.fahrenheit2);
});
test("conversion to C", function(){
    var actual1 = convertFromFahrenheitToCelsius(this.fahrenheit1);
    equal(actual1, this.celsius1);
	
    var actual2 = convertFromFahrenheitToCelsius(this.fahrenheit2);
    equal(actual2, this.celsius2);
});

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