摘要:介紹是基于測試框架行為驅動測試的定義它是通過用自然語言書寫非程序員可讀的測試用例擴展了測試驅動開發方法行為驅動開發人員使用混合了領域中統一的語言的母語語言來描述他們的代碼的目的函數包含兩個參數一個測試套件的名稱實現測試套件的代碼塊函數定義
介紹
Jasmine 是基于 BBD (behavior-driven development)測試框架
Suites and Specs行為驅動測試的定義:它是通過用自然語言書寫非程序員可讀的測試用例擴展了測試驅動開發方法, 行為驅動開發人員使用混合了領域中統一的語言的母語語言來描述他們的代碼的目的
describe 函數包含兩個參數
string name 一個測試套件的名稱
function fn 實現測試套件的代碼塊
it 函數定義兩個參數
string name spec的標題
function fn spec的函數
expect 函數 接收一個 value, 返回一個鏈式匹配對象
擁有以下匹配規則函數
toBe // 引用全等
toEqual // 深度遍歷,值全等
toMatch // 正則匹配, 支持字符串和正則表達式
toContain (字符串, 數組)
toBeNull // === null
toBeTruthy // Boolean(expect) === true
toBeLessThan // expect < value
toBeDefined // expect !== undefined
toBeUndefined // expect === undefined
toBeFalsy // Boolean(expect) === false
toBeGreaterThan // expect > value
toBeCloseTo // value - precision <= expect < value + precision
toThrow // expect throw "xx"
toThrowError expect throw type or match error message
fail 函數, 直接指定spec的錯誤原因
describe("A spec using the fail function", function() { var foo = function(x, callBack) { if (x) { callBack(); } }; it("should not call the callBack", function() { foo(false, function() { fail("Callback has been called"); }); }); });
一個suite 可以有多個 describe, 一個 describe 可以有多個 it, 一個it 可以有多個 expect
任何匹配表達式都可以有not前綴對象, 表示與期待的相反. 如
describe("a suite", function () { it("should not equal false if expect is true", function () { expect(true).not.toBe(false); }); });Setup and Teardown
在一個describe中, 單元測試中的的 多個it, 有共同的需要初始化的情況。集中初始化和卸載
beforeEach (describe 執行后,it 執行前調用)
afterEach (每一個 it 執行后調用)
beforeAll (describe 執行后,it 執行前調用,只調用一次)
afterAll (所有 it執行完成后調用)
this在beforeEach, it, afterEach, 共享獨立的空this對象
嵌套 describe塊beforeEach, afterEach 只針對同級describe函數作用域
describe("A spec", function() { var foo; beforeEach(function() { foo = 0; foo += 1; }); afterEach(function() { foo = 0; }); it("is just a function, so it can contain any code", function() { expect(foo).toEqual(1); }); it("can have more than one expectation", function() { expect(foo).toEqual(1); expect(true).toEqual(true); }); describe("nested inside a second describe", function() { var bar; beforeEach(function() { bar = 1; }); it("can reference both scopes as needed", function() { expect(foo).toEqual(bar); }); }); });Disabling Suites
使用 xdescribe 函數 可以跳過當前的測試套件
Pending Specs使用 xit表示 該行為測試待規范,跳過測試
SpiesspyOn函數具有監控對象的函數是否調用的功能, spy化的對象函數, 允許有以下的匹配函數
toHaveBeenCalled // 匹配是否調用
toHaveBeenCalledTimes // 匹配調用次數
toHaveBeenCalledWith // 匹配被調用的函數參數是否與預訂的一致
spy化后的函數,可以指定執行的返回值
var foo = { setBar: function(value) { bar = value; }, getBar: function() { return bar; } }; spyOn(foo, "getBar").and.returnValue(745); fetchedBar = foo.getBar(); // fetchBar is 745
spy化的函數
and.returnValue (返回值)
and.throwError (拋出異常)
and.callThrough (直接返回調用結果)
and.returnValues (返回一個數組)
and.callFake (通過回調篡改返回值)
and.stub (凍結spy化的函數執行)
and.identity (返回一個name)
spy 其它跟蹤屬性
calls.any() (return true表示被調用過, return false 表示從未調用過)
calls.count() (返回調用的次數)
calls.argsFor(index) (數組的形式返回某一次調用的入參)
calls.allArgs() (二維數組的形式返回所有調用的入參)
calls.all() (返回一個或多個{object: xx, args: [], returnValue: xx}的對象,多個由數組表示)
calls.mostRecent() (返回最近的一個調用上下文對象)
calls.first() (返回第一次調用的上下文對象)
calls.reset() (清空跟蹤數據)
createSpy 與 createSpyObjspyOn 是基于操作對象的函數調用進行tracking, 而jasmine.createSpy則是創建一個空的tracking函數, jasmine.createSpyObj 可以為創建一個對象,擁有多個tracking的函數
封裝匹配 value的函數jasmine.any (匹配相同class)
jasmine.anything (匹配 非 null, undefined 的所有值)
jasmine.objectContaining (匹配對象局部的key, value)
jasmine.arrayContaining (匹配數組的某些項)
jasmine.stringMatching (匹配局部字符串)
Custom asymmetric equality tester自定義匹配規則, 傳入一個對象, 對象中的 asymmetricMatch 是一個函數,其中入參表示姚培培的value
Jasmine Clockjasmine.clock().install 時間記錄啟動, jasmine.clock().tick(millsecond) 多少毫秒后,調用后續的expect
Mocking the Date 異步支持 Asynchronous SupportbeforeAll, afterAll, beforeEach, afterEach, it 支持函數第一個參數 done 進行回調
describe("A spec using done.fail", function() { var foo = function(x, callBack1, callBack2) { if (x) { setTimeout(callBack1, 0); } else { setTimeout(callBack2, 0); } }; it("should not call the second callBack", function(done) { foo(true, done, function() { done.fail("Second callback has been called"); } ); }); });
done.fail 返回錯誤的執行
相關資料BDD介紹
Jasmine文檔
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/85051.html
摘要:只測試指定測試套件同一層級中出現兩個測試將忽略同理,同一層級出現和,將會忽略案例忽略該測試忽略該測試忽略該測試自定義比較函數覆蓋比較函數在聲明周期使用,返回或,如果返回或則表示使用默認的進行比較自定義匹配規則在聲明周期使用加入自定義匹配規則 focus spec 只測試指定測試套件, 同一層級中出現 it, fit 兩個測試 spec, 將忽略 it, 同理,同一層級出現 descri...
摘要:只測試指定測試套件同一層級中出現兩個測試將忽略同理,同一層級出現和,將會忽略案例忽略該測試忽略該測試忽略該測試自定義比較函數覆蓋比較函數在聲明周期使用,返回或,如果返回或則表示使用默認的進行比較自定義匹配規則在聲明周期使用加入自定義匹配規則 focus spec 只測試指定測試套件, 同一層級中出現 it, fit 兩個測試 spec, 將忽略 it, 同理,同一層級出現 descri...
摘要:框架本身可以很好地支持自下而上的單元測試。在中,這些原因可以分為性能真實的操作,依靠定時行為及網絡活動減慢了測試隔離單元測試應把重點放在小的一塊功能成為可能,并解耦不可靠的或低依賴使用對象是擁抱和的基本組成部分。 最近在慢慢深入Backbone,也試著寫一些測試,找一些合適的文檔來學習。于是就找到了一個系列的文章 : Testing Backbone applications with...
摘要:而測試驅動開發技術并不只是單純的測試工作。需求向來就是軟件開發過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構這個詞, 第一反應是: 前端還有架構這一說呢? 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備受重視, 早在開發工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...
摘要:而測試驅動開發技術并不只是單純的測試工作。需求向來就是軟件開發過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構這個詞, 第一反應是: 前端還有架構這一說呢? 在后端開發領域, 系統規劃和可擴展性非常關鍵, 因此架構師備受重視, 早在開發工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...
閱讀 2435·2021-10-09 09:59
閱讀 2188·2021-09-23 11:30
閱讀 2599·2019-08-30 15:56
閱讀 1152·2019-08-30 14:00
閱讀 2946·2019-08-29 12:37
閱讀 1264·2019-08-28 18:16
閱讀 1665·2019-08-27 10:56
閱讀 1032·2019-08-26 17:23