javaScript測試框架jasmine介紹(一)

   (本文轉自淘寶QA博客,原文地址:http://www.taobaotest.com/blogs/2175

   目前網上關於前端js測試框架jasmine功能介紹的文章少之又少,由於筆者最近接觸js的測試,將選用jasmine作爲測試框架,這裏簡單介紹一下jasmine在測試中的使用,後續還將對測試中遇到的問題和框架的使用經驗進行分享。文章內容主要來源於對官網(http://pivotal.github.com/jasmine/)的翻譯和其他一些零散的文檔,以及筆者對該框架的一些理解,如有描述不清或理解偏差,歡迎拍磚

    Jasmine是一種js測試框架,它不依賴於其它任何的js框架,不需要DOM,且清爽、明確的語法使得使用者很容易地進行白盒測試。

    先來大致瞭解jasmine用例的語法結構:

    測試suite開始於全局方法describe,這個方法含兩個參數:一個String,一個function,String用來描述一個spec suite(筆者將spec理解爲測試主體,而suite就是spec的集合),而function的內容就是suites

    spces用jasmine的全局方法it來定義,it和describe一樣,包含兩個參數(一個String,一個function),String用來描述spec,而function的內容就是測試主體。一個spec可以包含一個或多個expections。

    一個expectation在jasmine中就是一個斷言,返回true或false。只有當一個spec中的expections全爲ture時,這個spec顯示通過,否則失敗

    最基本的jasmine用例結構如下圖:

     

    因爲describe和it是function,所以可以包含可執行的代碼。由於javaScript的語法規則,定義在describe中的變量在it裏是有效的,如下圖
    
      
   

          Ecpections由方法expect構建,帶有實際值,它和Matcher方法鏈接在一起,Matcher方法帶期望值。

    每個matcher在真實值和期望值之間進行比較,返回boolean。jasmine通過exception的返回來判定spec是通過還是失敗

    任何matcher都能通過在expect調用matcher前加上not來判斷一個否定的斷言,如下圖

     
     

      Jasmine含有一個豐富的matcher集,也可以自己定義matcher來實現一個特殊的斷言,下面簡單介紹一下各種matcher的使用,對於簡單易理解的讀者可以通過下面截圖中it的一個參數字符串的意思來理解,複雜的筆者會做出相應的說明

     下圖的兩個matcher都爲判等,toBe()與toEqual的區別相當於js中==和===的區別,前者判斷值,後者判斷值和類型

    
     

          下圖爲匹配方法,紅色爲不能匹配
    

    

         下面的matcher都易懂,不解釋,所有的expect返回的都爲true,記住這點對理解matcher用法很有幫助

     
     
    

     toBeCloseTo相對難理解,這裏做一下解釋:

     先來看toBeCloseTo的源碼,如下圖,先對傳入的精度參數判零後做了一次邏輯或運算,並將返回值賦給精度參數,之後代碼很好理解,是根據精度參數調整四捨五入的範圍,最初讓筆者糾結的是這個方法爲什麼要用精度參數和2做邏輯或,這麼一來不是無論傳什麼非零參數,精度參數在邏輯或之後都成了1?後來發現是這麼回事,注意:js邏輯或的值就是true或者false類型的原來是個大的錯誤,邏輯或會取||兩邊的一個不爲0或false的值,從左往右    
    

     分析完源碼就不難理解toBeCloseTo的作用,就是將expected和actual的小數點後precision+1位四捨五入,然後判斷是否相等,相等返回true,否則返回false,見下圖

    

    

         toThrow()不解釋,見下圖

    
     
    

      爲了避免重複的setup和teardown,jasmine提供了全局的方法 beforeEach和afterEach,beforeEach在每個spec(it)前執行一次,afterEach在每個spec(it)後執行一次,官網的例子寫得不是很好,筆者做了一下修改,見下圖

    

    

      describe是可以嵌套的,並且specs可以定義在任何一層的describe中,jasmine允許用樹狀的方法來組成一個suite.在一個spec執行之前,jasmine從樹的根節點依次執行各個beforeEach,afterEach同理,只是在spec執行之後執行,見下圖

     

     

         suites和specs是可以設爲無效的,只需要將describe和it寫成xdescribe和xit,這樣在運行時它們是被忽略的,它們的結果不會出現在總的結果裏

      
     

 

         上述的這些特性已基本可以滿足一般場景測試的需求,讀者可以自行嘗試,在本系列的第二講中將介紹jasmine的一些不常用的特性,以滿足一些特殊的測試場景

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章