摘要:背景最近負責一個需求,使用到了測試框架做單元測試介紹就是一種單元測試框架,它不依賴任何其他框架,也不需要對操作,具有靈巧而明確的語法可以讓你輕松的編寫測試代碼。布爾測試,判斷值是否是,或者可以轉換為。
背景
最近負責一個需求,使用到了jasmine測試框架做單元測試
介紹Jasmine就是一種JavaScript單元測試框架,它不依賴任何其他JS框架,也不需要對DOM操作,具有靈巧而明確的語法可以讓你輕松的編寫測試代碼。它是一套Javascript行為驅動開發框架(BDD),干凈簡潔,表達力強且易于組織,不依賴于其他任何框架和DOM,可運行于Node.js,瀏覽器端或移動端。
Jasmine官網
Jasmine github
Suites
Suites可以理解為一組測試,使用全局的Jasmin函數describe 創建。describe 函數接受兩個參數,一個字符串和一個函數。字符串是這個Suites的名字或標題(通常描述下測試內容),函數是實現Suites的代碼塊。
Specs
Specs可以理解為一個測試,使用全局的Jasmin函數it 創建。和describe 一樣接受兩個參數,一個字符串和一個函數,函數就是要執行的測試,字符串就是測試的名字。一個Spec可以包含多個expectations來測試代碼。在Jasmine中,一個expectations就是一個斷言,只能是true 或false 。只有全部expectations是true 的時候spec才會通過。
由于describe 和it 塊實質上都函數,所有他可以包含任何的可執行代碼。javascript的作用域規則也是適用的,所以describe 內定義的變量,其內部所有的it 都能訪問到。
Expectations
expectations由expect 函數創建。接受一個參數。和Matcher一起聯用,設置測試的預期值。
在Jasmine中,每個Matcher實現一個“期望值”和“實際值”的布爾判斷,Jasmine會根據Mather判斷expectation是true 還是false ,然后決定spec是測試通過還是失敗。所有Matcher可以通過not 執行否定判斷。
基礎matchers
toBe():相當于===比較。
toNotBe()
toBeDefined():檢查變量或屬性是否已聲明且賦值。
toBeUndefined()
toBeNull():是否是null。
toBeTruthy():布爾測試,判斷值是否是,或者可以轉換為true。
toBeFalsy()
toBeLessThan():數值比較,小于。
toBeGreaterThan():數值比較,大于。
toEqual():相當于==,注意與toBe()的區別。
一個新建的Object不是(not to be)另一個新建的Object,但是它們是相等(to equal)的。
expect({}).not().toBe({});
expect({}).toEqual({});
toNotEqual()
toContain():數組中是否包含元素(值)。只能用于數組,不能用于對象。
toBeCloseTo():是比較兩個值是否足夠接近(不一定要相等)。
it("The "toBeCloseTo" matcher is for precision math comparison", function() { var pi = 3.1415926, e = 2.78; expect(pi).not.toBeCloseTo(e, 2); expect(pi).toBeCloseTo(e, 0); });
看源碼理解用法
getJasmineRequireObj().toBeCloseTo = function () { function toBeCloseTo() { return { compare: function (actual, expected, precision) { if (precision !== 0) { precision = precision || 2; } return { pass: Math.abs(expected - actual) < (Math.pow(10, -precision) / 2) }; } }; } return toBeCloseTo; };
比如第二個expect就是如果pi-e的絕對值小于10的-0次方除以2的值,斷言通過
toMatch():按正則表達式匹配。
toNotMatch()
toThrow():檢驗一個函數是否會拋出一個錯誤
it("toThrow判斷一個函數是否有拋出異常", function() { var foo = function() { return 1 + 2; }; var bar = function() { return a + 1; //a不存在 }; expect(foo).not.toThrow(); expect(bar).toThrow(); });
其他matchers
jasmine.any(Class)
傳入構造函數或者類返回數據類型作為期望值,返回true表示實際值和期望值數據類型相同:
it("matches any value", function() { expect({}).toEqual(jasmine.any(Object)); expect(12).toEqual(jasmine.any(Number)); });
jasmine.anything()
如果實際值不是null或者undefined則返回true:
it("matches anything", function() { expect(1).toEqual(jasmine.anything()); });
jasmine.objectContaining({key:value})
實際對象只要匹配到有對應的鍵/值就算匹配通過:
foo = { a: 1, b: 2, bar: "baz" }; expect(foo).toEqual(jasmine.objectContaining({bar: "baz"}));
jasmine.arrayContaining([val1,val2,...])
實際數組只要匹配到有包含的數值就算匹配通過:
foo = [1, 2, 3, 4]; expect(foo).toEqual(jasmine.arrayContaining([3, 1]));
jasmine.stringContaining(str)
stringContaining可以匹配字符串的一部分也可以匹配對象內的字符串:
expect({foo: "bar"}).toEqual({foo: jasmine.stringMatching(/^bar$/)}); expect("foobarbaz").toEqual({foo: jasmine.stringMatching("bar")});Setup and Teardown
為了在復雜的測試用例中更加便于組裝和拆卸,Jasmine提供了四個函數:
beforeEach(function) //在每一個測試用例(it)執行之前都執行一遍beforeEach函數;
afterEach(function) //在每一個測試用例(it)執行完成之后都執行一遍afterEach函數;
beforeAll(function) //在所有測試用例執行之前執行一遍beforeAll函數;
afterAll(function) //在所有測試用例執行完成之后執行一遍afterAll函數;
jasmine還有自定義matcher的功能和一些高級功能,暫時沒有用到,有機會學習下
參考資料JavaScript單元測試框架——Jasmine入門
JavaScript 單元測試框架:Jasmine 初探
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80001.html
摘要:很快我發現有一個誤區,許多人認為單元測試必須是一個集中運行所有單元的測試,并一目了然。許多人認為單元測試,甚至整個測試都是在編碼結束后的一道工序,而修復也不過是在做垃圾掩埋一類的工作。 單元測試Unit Test 很早就知道單元測試這樣一個概念,但直到幾個月前,我真正開始接觸和使用它。究竟什么是單元測試?我想也許很多使用了很久的人也不一定能描述的十分清楚,所以寫了這篇文章來嘗試描述它...
摘要:單元測試我們可以將其分成兩類獨立單獨測試與測試工具集。工具集還有更多,這一切我們將在單元測試組件與指令單元測試逐一說明。那么下一篇,我們將介紹如何使用進行單元測試。 本文將探討如何搭建測試環境、以及Angular測試工具集。 測試環境 絕大部分都是利用Angular Cli來創建項目,因此,默認已經集成我們所需要的npm包與腳本;當然,如果你是使用自建或官網 quickstart 的話...
摘要:小結我們初步了解了使用來進行測試,這樣有利于我們接下來去理解使用進行單元測試翻譯中 showImg(https://segmentfault.com/img/bVxI9p); 這是一些列文章,陸續翻譯整理中... 原文地址:http://www.bradoncode.com/blog/2015/05/12/angularjs-testing-getting-started/ @ Bra...
摘要:不論你是在寫瀏覽器端還是后端的,總存在那么一個問題我該使用什么單元測試庫去確保我的代碼如預期的運行呢總是有那么一些流行的框架可供選擇。在中仍然流行,并且擁有來自許多地方性的支持。如果你的測試使用它,直到調用了才能通過。 不論你是在寫瀏覽器端javascript還是后端的nodejs,總存在那么一個問題:我該使用什么單元測試庫去確保我的代碼如預期的運行呢?總是有那么一些流行的框架可供選擇...
摘要:框架本身可以很好地支持自下而上的單元測試。在中,這些原因可以分為性能真實的操作,依靠定時行為及網絡活動減慢了測試隔離單元測試應把重點放在小的一塊功能成為可能,并解耦不可靠的或低依賴使用對象是擁抱和的基本組成部分。 最近在慢慢深入Backbone,也試著寫一些測試,找一些合適的文檔來學習。于是就找到了一個系列的文章 : Testing Backbone applications with...
閱讀 2484·2023-04-25 19:24
閱讀 1700·2021-11-11 16:54
閱讀 2833·2021-11-08 13:19
閱讀 3547·2021-10-25 09:45
閱讀 2552·2021-09-13 10:24
閱讀 3276·2021-09-07 10:15
閱讀 4014·2021-09-07 10:14
閱讀 2950·2019-08-30 15:56