91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

jsamine單元測試框架和ext-js框架集成

發布時間:2020-06-10 14:09:59 來源:網絡 閱讀:1053 作者:charles_wang888 欄目:web開發

 

最近研究了下jasmine框架,收益頗豐。基于公司一位同事的文檔,我這里列舉下jasmine框架的一些特征。

 

一:介紹

Jasmine框架是一個行為驅動的開發框架,用于測試javascript代碼,它不會依賴于任何其他的javascript框架,也不需要一個DOM,并且它有非常簡單和清晰的語法。

二:適用范圍

因為Jasmine框架不依賴瀏覽器,DOM,或者任何javascript框架,所以它特別適合單元測試網站,Node.js項目或者任何有javascript運行的項目。

小例子1:比如要測試是否真實值比期望值小

  1. beforeEach(function() { 
  2.   this.addMatchers({ 
  3.  
  4.     toBeLessThan: function(expected) { 
  5.       var actual = this.actual; 
  6.       var notText = this.isNot ? " not" : ""
  7.  
  8.       this.message = function () { 
  9.         return "Expected " + actual + notText + " to be less than " + expected; 
  10.       } 
  11.  
  12.       return actual < expected; 
  13.     } 
  14.  
  15.   }); 
  16. }); 

小例子2: 比如要測試Ajax或者其他異步的行為:

  1. var Klass = function () { 
  2. }; 
  3.  
  4. Klass.asyncMethod = function (callback) { 
  5.   someAsyncCall(callback); 
  6. }; 
  7.  
  8. ... 
  9.  
  10. it('should test async call'function () { 
  11.   spyOn(Klass, 'asyncMethod'); 
  12.   var callback = jasmine.createSpy(); 
  13.  
  14.   Klass.asyncMethod(callback); 
  15.   expect(callback).not.toHaveBeenCalled(); 
  16.  
  17.   var someResponseData = 'foo'
  18.   Klass.asyncMethod.mostRecentCall.args[0](someResponseData); 
  19.   expect(callback).toHaveBeenCalledWith(someResponseData); 
  20.  
  21. }); 

 

三:我們為什么選擇Jasmine框架?

雖然在市面上有許多種類的js單元測試框架,比如TestSwarm, JsTestDriver,Buster.js,YUI Yeti,Sinon等,但是很多單元測試框架只支持和瀏覽器協同工作,有些單元測試框架無法支持異步回調代碼的測試。有些代碼,對于IDE很難理解,然而,Jasmine框架則是集各種框架優點于一身的好框架。

 

四:Jasmine框架的優秀設計原則:

(1)好的js單元測試框架不應該聯合到任何瀏覽器,框架,平臺或者宿主機器的語言設置。

(2)好的js單元測試框架應該有符合js語言習慣的語法。

(3)好的js單元測試框架應該在任何js可以運行的地方運行

(4)好的js單元測試框架應該對于被測試的應用是非侵入式的。

(5)好的js單元測試框架應該能和IDE很好融合,比如可以通過IDE的靜態代碼質量檢查。

(6)好的js單元測試框架應該足夠簡單,并且容易上手。(這一點我深有體會,我看5分鐘就學會了,然后寫了第一個demo并且跑通了)

 

五:實踐

這里給出一個我前幾天實踐的例子,我利用jasmine來測試ext-js的代碼:

首先我們要建立單元測試的目錄結構,基于建立在test目錄之下,我們共需要2個目錄和一個文件。

 

目錄1: lib ---這個目錄是存放jasmine框架本身的代碼

目錄2: spec---這個目錄是存放所有的單元測試代碼

SpecRunner.html--這個文件用于配置整個jasmine單元測試框架,因為我們最簡單的應用只要把測試結果輸出到控制臺上,所以我們這里只配置了ConsoleReporter.

 

SpecRunner.html的代碼如下:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
  2.  
  3.   "http://www.w3.org/TR/html4/loose.dtd"> 
  4.  
  5. <html> 
  6. <head> 
  7.   <title>Jasmine Spec Runner</title> 
  8.  
  9.   <link rel="shortcut icon" type="p_w_picpath/png" href="lib/jasmine-1.2.0/jasmine_favicon.png"> 
  10.  
  11.   <link rel="stylesheet" type="text/css" href="lib/jasmine-1.2.0/jasmine.css"> 
  12.  
  13.   <script type="text/javascript" src="lib/jasmine-1.2.0/jasmine.js"></script> 
  14.  
  15.   <script type="text/javascript" src="lib/jasmine-1.2.0/jasmine-html.js"></script> 
  16.  
  17.   
  18.  
  19.   <!-- include the ext-js library here --> 
  20.  
  21.   <!-- load the ext framework work under root folder  --> 
  22.  
  23.   <script type="text/javascript" src="/html/js/ext-js/ext-all.js"></script> 
  24.  
  25.   
  26.  
  27.   <!-- include the source files here which need to be tested --> 
  28.  
  29.   <script type="text/javascript" src="../app/app.js"></script> 
  30.  
  31.  
  32.   <!-- include spec files here...they are test cases --> 
  33.  
  34.   <script type="text/javascript" src="spec/ProjectFoundationVerification.js"></script>
  35.   <script type="text/javascript"> 
  36.  
  37.  
  38.   (function() { 
  39.  
  40.       var jasminejasmineEnv = jasmine.getEnv(); 
  41.       jasmineEnv.updateInterval = 1000
  42.       var htmlReporter = new jasmine.HtmlReporter(); 
  43.       jasmineEnv.addReporter(htmlReporter); 
  44.       jasmineEnv.specFilter = function(spec) { 
  45.         return htmlReporter.specFilter(spec); 
  46.       }; 
  47.  
  48.       var currentWindowOnload = window.onload; 
  49.  
  50.       window.onload = function() { 
  51.         if (currentWindowOnload) { 
  52.           currentWindowOnload(); 
  53.         } 
  54.         execJasmine(); 
  55.       }; 
  56.   
  57.       function execJasmine() { 
  58.         jasmineEnv.execute(); 
  59.  
  60.       }
  61.  
  62.     })(); 
  63.  

  64.  
  65.   </script> 
  66. </head> 
  67. <body> 
  68. </body> 

從這段代碼我們不難看出,13-15行引入了jasmine框架,23行引入了ext-js庫,因為我們要測試ext-js代碼,29行是需要被我們測試的代碼,34行是單元測試代碼,也就是我們寫的測試用例,第40-59行則是創建一個HTMLReporter用于顯示,并且啟動jasmine框架。

 

我們寫了一個很簡單的測試用例,它用來判定ext-js庫的一些基本信息:

  1. /** 
  2.  
  3. * This file is used for verifying the project foundation 
  4.  
  5. */ 
  6.  
  7.  
  8. describe("Ext-js Basic Information"function() { 
  9.  
  10.  
  11.          //test whether ext-js has been loaded 
  12.  
  13.     it(" Ext-js has been loaded"function() { 
  14.  
  15.         expect(Ext).toBeDefined(); 
  16.  
  17.          
  18.  
  19.     }); 
  20.  
  21.      
  22.  
  23.     //test whether ext-js major version is 4 
  24.  
  25.     it(" Ext-js has version ,and major version is 4" ,function(){ 
  26.  
  27.          expect(Ext.getVersion()).toBeTruthy(); 
  28.  
  29.         expect(Ext.getVersion().major).toEqual(4); 
  30.  
  31.     }); 
  32.  
  33. }); 
  34.  
  35.   

 

最終測試的結果,就是在瀏覽器上顯示了測試報告,綠條告訴我們測試用例都通過了:

 

jsamine單元測試框架和ext-js框架集成

 

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿勒泰市| 中超| 绍兴市| 榆社县| 额济纳旗| 凤凰县| 合阳县| 宁强县| 葵青区| 纳雍县| 华坪县| 正阳县| 丰都县| 北安市| 大姚县| 旌德县| 皮山县| 永安市| 师宗县| 北辰区| 昆山市| 定南县| 北票市| 宜黄县| 鹤山市| 云阳县| 都江堰市| 临夏市| 克什克腾旗| 尼玛县| 丹凤县| 神木县| 浪卡子县| 武城县| 鄱阳县| 二连浩特市| 广州市| 广水市| 海安县| 敦煌市| 辽源市|