JavaScript的单元测试工具(2)

发表于:2014-10-27来源:uml.org.cn作者:Elaine.Ye点击数: 标签:JavaScript
假设你有两个函数负责摄氏温度到华氏温度的来回转换,清单5给出了进行这些转换的脚本。 清单5. 转换(qunit/js/script.js) function convertFromCelsiusToFahrenhei

假设你有两个函数负责摄氏温度到华氏温度的来回转换,清单5给出了进行这些转换的脚本。

清单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拥有两个测试。

若要运行这些测试:

1. 把源代码和测试文件放入到HTML测试器中,如清单7所示.

2. 在浏览器中打开该HTML页面。

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

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

图1展示了QUnit在浏览器(Firefox)中显示结果的方式。

图1. QUnit结果

清单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展示了清单9中的代码的QUnit返回结果。

图2. QUnit结果——最后一个测试失败

结果描述得相当详细,且很容易就跟踪到最后一个断言中的预期结果和实际结果之间的不同。

原文转自:http://www.uml.org.cn/Test/201301152.asp