JavaScript的單元測試工具(3)

發表于:2014-10-27來源:uml.org.cn作者:Elaine.Ye點擊數: 標簽:JavaScript
QUnit的另一個很重要的特性是,其允許你在某個模塊中的所有測試被執行之前先、或之后再執行一些命令。module()函數把setup()和teardown()回調當成第二參數來

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);  
  }); 

該例子把用在斷言中的值移到了setup這部分內容中,避免在測試邏輯中使用這些值。

QUnit 還通過asyncTest()函數來提供異步測試支持,如果你正在使用Asynchronous JavaScript and XML(Ajax)來進行事務處理的話,則這是一個非常有用的功能。在這一上下文中,expect()函數能夠讓你輕松地驗證運行在一個測試中的多個斷言。

YUI Test:一個獨立的單元測試模塊

YUI Test,YUI庫(Yahoo!)內部的一個組件,是一個詳盡完整的單元測試框架。若要開始使用YUI Test,你需要:

1. 把YUI種子導入HTML運行器中,如下.

<script src="http://yui.yahooapis.com/3.4.1/build/yui/yui-min.js" kesrc="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模塊顯然是出于測試目的必需的,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的測試用例?,F在,你可以在對象字面量(object literal)內部編寫測試方法了,該字面量會被作為參數傳遞給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)); 
  } 
  })); 

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

...
国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97