1. 程式人生 > >Javascript測試框架Jasmine(四):自定義Matcher

Javascript測試框架Jasmine(四):自定義Matcher

zz from:http://keenwon.com/1212.html

一個專案常常需要封裝自定義的Matcher來在多個spec中使用,這次講下怎麼寫相容Jasmine的自定義Matcher。

自定義的Matcher從本質上講是一個對比函式,它的函式名就是暴露給expect呼叫的名稱,它接受actual 值和expected 值。這個函式會傳入Jasmine作用域中,可以在beforeEach 中呼叫到。每次spec執行完後,都會把自定義Matchers解除安裝,下面看個簡單例子:

  1. var customMatchers ={
  2. toBeGoofy:function(util
    , customEqualityTesters){
  3. return{
  4. compare:function(actual, expected){
  5. if(expected ===undefined){
  6. expected ='';
  7. }
  8. var result ={};
  9. result.pass = util.equals(actual.hyuk,"gawrsh"+ expected, customEqualityTesters);
  10. if(result.pass){
  11. result.message ="Expected "+ actual +" not to be quite so goofy"
    ;
  12. }else{
  13. result.message ="Expected "+ actual +" to be goofy, but it was not very goofy";
  14. }
  15. return result;
  16. }
  17. };
  18. }
  19. };

Matcher建構函式

自定義Matcher的建構函式接受兩個引數,util :給Matcher使用的一組工具函式;customEqualityTesters :呼叫util.equals 的時候需要傳入。

建構函式需要返回一個物件,這個物件要包含名為compare 的函式,執行Matcher時會呼叫compare 函式。

compare函式

compare 函式接收傳入expect 的值作為它的第一個引數actual ,如果存在的話,傳入Matcher自己的引數會作為compare 函式的第二個引數。上例中的toBeGoofy 就會接收一個可選的expected 引數,預設不需要傳入。

Result

compare 函式必須返回一個結果物件。結果物件必須包含一個布林值型別的pass 屬性,告訴expectation Matcher是否通過。如果expectation呼叫了.not 的話,會做相反的判斷。上例中的toBeGoofy 測試實際值得hyuk 屬性是否和期望值相等。

錯誤資訊

如果不指定錯誤資訊,expectation會嘗試用Matcher生成一個錯誤資訊。但是,如果返回的result物件包含了message 屬性的話,會使用message 的值作錯誤提示。

先看看指定message 的效果

  1. var customMatchers ={
  2. toBeGoofy:function(util, customEqualityTesters){
  3. return{
  4. compare:function(actual, expected){
  5. if(expected ===undefined){
  6. expected ='';
  7. }
  8. var result ={};
  9. result.pass = util.equals(actual.hyuk,"gawrsh"+ expected, customEqualityTesters);
  10. if(result.pass){
  11. result.message ="通過了,通過了,通過了...";
  12. }else{
  13. result.message ="沒通過,沒通過,沒通過...";
  14. }
  15. return result;
  16. }
  17. };
  18. }
  19. };
  20. 相關推薦

    Javascript測試框架Jasmine定義Matcher

    zz from:http://keenwon.com/1212.html 一個專案常常需要封裝自定義的Matcher來在多個spec中使用,這次講下怎麼寫相容Jasmine的自定義Matcher。 自定義的Matcher從本質上講是一個對比函式,它的函

    Javascript測試框架JasminejqPaginator測試例項

    zz from:http://keenwon.com/1225.html jqPaginator是我自己寫的一個分頁元件,已經用在了公司的兩個專案上。這次學習Jasmine,首先想到的就是怎麼測試下jqPaginator。 看過jqPaginator專案的都知道,它

    Javascript測試框架Jasmine非同步程式碼測試

    zz from:http://keenwon.com/1223.html 模擬Timeout Jasmine Clock 可以用來測試setTimeout 和setInterval 的回撥操作。它使回撥函式同步執行,當Clock的時間超過timer的時間,回撥函式

    Javascript測試框架JasmineSetup、Teardown、巢狀describe等

    zz from: http://keenwon.com/1206.html 上一篇把Matcher說了說,本來該說自定義Matcher的,但是發現有些七七八八的細節沒講,那就今天先把這些基礎說了。 Setup and Teardown S

    JS元件系列——BootstrapTable+KnockoutJS實現增刪改查解決方案定義T4模板快速生成頁面

    前言:上篇介紹了下ko增刪改查的封裝,確實節省了大量的js程式碼。博主是一個喜歡偷懶的人,總覺得這些基礎的增刪改查效果能不能通過一個什麼工具直接生成頁面效果,啥程式碼都不用寫了,那該多爽。於是研究了下T4的語法,雖然沒有完全掌握,但是算是有了一個大致的瞭解,給需要自定義模板的園友們提供一個參考。於是乎有了今天

    Spring Data REST入門定義查詢

    一、自定義查詢方法 通常會有這樣的需求,根據給定的欄位查詢相應表中的資料物件。比如在前幾篇部落格中定義的User實體來,需要一個按照name值查到與之對應的資料物件返回,只需要在UserRopository中定義如下程式碼: /**

    Spring Security 入門定義-Filter

    前文導讀本文解決問題將自定義的 Filter 加入到 Spring Security 中的 Fi

    Python 各種測試框架簡介nose

    調用 QQ upm href 命令 math 一點 發現 方法 轉載:https://blog.csdn.net/qq_15013233/article/details/52527260 摘要 這裏將從(pythontesting.net)陸續編譯四篇 Python 測試框

    JavaScript各種繼承方式原型式繼承

      一 原理   利用工具函式,通過原型物件直接得到子類的例項。   function inherit(obj){ // 在閉包中建立子類,對外隱藏子類 function Temp(){ } Temp.prototype = ob

    深入淺出微服務框架dubbo設計篇

    四、 設計篇本篇是《深入淺出微服務框架dubbo》的終篇4.1執行緒模型netty+zookeeper+curator+dubboProtocol+hession2seralization組合4.2協議資料格式這裡引用官網的一張圖:第三行代表了協議頭,Magic,serial

    go的gin框架使用get請求

    比如我們get請求的試試輸入引數,引數不存在,得有個相容機制,使用DefaultQuery就能輕鬆解決我們在位址列輸入地址,不帶引數,我們看一下結果我們看到firstname由於沒值被替換成了test,如果有值的情況下則用引數值注意:當引數存在,但是空字串時,並不會使用預設引

    Python3+Selenium2完整的自動化測試框架實現自動化測試環境搭建

    添加 在線安裝 自動化 eight str rain 中間 自動打開 發的 1 環境搭建準備 (1) 下載Python3版本的安裝包,直接官網下載即可:Python官網:https://www.python.org/ (2) 下載Python的基礎工具包

    springboot框架開發微信公眾號定義選單的使用

    關於自定義選單,微信為我們提供了幾個介面分別是建立、查詢和刪除。我們平時使用最多的就是建立選單了,往往我們執行了建立選單的程式碼後,選單並不會當即在我們關注過的公眾號上顯示出來,我們可以通過重新關注的方法,來檢視我們建立或更改後的選單。下面就來跟筆者來學一學這些介面的使用方法吧 一、由於這幾個介

    Shiro許可權管理框架定義Filter實現及其問題排查記錄

    明確需求 在使用Shiro的時候,鑑權失敗一般都是返回一個錯誤頁或者登入頁給前端,特別是後臺系統,這種模式用的特別多。但是現在的專案越來越多的趨向於使用前後端分離的方式開發,這時候就需要響應Json資料給前端了,前端再根據狀態碼做相應的操作。那麼Shiro框架能不能在鑑權失敗的時候直接返回Json資料呢?答案

    Android項目實戰定義倒計時的TextView

    初始 als time class nts 時間 自定義 計時 err 原文:Android項目實戰(十):自定義倒計時的TextView項目總結 --------------------------------------------------------------

    每天學點SpringCloud定義Eureka集群負載均衡策略

    log util domain 避免 can val 如果 dba filters 相信看了 每天學點SpringCloud(一):簡單服務提供者消費者調用,每天學點SpringCloud(二):服務註冊與發現Eureka這兩篇的同學都了解到了我的套路,沒錯,本篇博客同樣是

    [Golang] 從零開始寫Socket Server2 定義通訊協議

            在上一章我們做出來一個最基礎的demo後,已經可以初步實現Server和Client之間的資訊交流了~ 這一章我會介紹一下怎麼在Server和Client之間實現一個簡單的通訊協議,從而增強整個資訊交流過程的穩定性。  

    iOS開發簡記2定義tabbar

    tabbar是放在APP底部的控制元件。常見的APP都使用tabbar來進行功能分類的管理,比如微信、QQ等等。 小程需要一個特殊一點的tabbar,要求突顯中間的那個按鈕,讓中間按鈕特別顯眼,從而引導使用者去點選。 所以,讓中間按鈕大於兩邊的按鈕,是一個基本的要求。 使用常規的UITabBar跟UIT

    Unity Editor 基礎篇定義 Inspector 面板

    自定義Inspector屬性面板 EditorGUILayout 編輯器介面佈局  這是一個編輯器類,如果想使用它你需要把它放到工程目錄下的Assets/Editor資料夾下。編輯器類在UnityEditor名稱空間下。所以當使用C#指令碼時,你需要在指令碼前面加上

    Unity Editor 基礎篇定義視窗案例二

    本文為本人學習上鍊接的筆記微有改動,請點選以上鍊接檢視原文,尊重樓主智慧財產權。 ----------------------------------------------------------------------------------------------