摘要:介紹是基于測試框架行為驅(qū)動測試的定義它是通過用自然語言書寫非程序員可讀的測試用例擴展了測試驅(qū)動開發(fā)方法行為驅(qū)動開發(fā)人員使用混合了領(lǐng)域中統(tǒng)一的語言的母語語言來描述他們的代碼的目的函數(shù)包含兩個參數(shù)一個測試套件的名稱實現(xiàn)測試套件的代碼塊函數(shù)定義
介紹
Jasmine 是基于 BBD (behavior-driven development)測試框架
Suites and Specs行為驅(qū)動測試的定義:它是通過用自然語言書寫非程序員可讀的測試用例擴展了測試驅(qū)動開發(fā)方法, 行為驅(qū)動開發(fā)人員使用混合了領(lǐng)域中統(tǒng)一的語言的母語語言來描述他們的代碼的目的
describe 函數(shù)包含兩個參數(shù)
string name 一個測試套件的名稱
function fn 實現(xiàn)測試套件的代碼塊
it 函數(shù)定義兩個參數(shù)
string name spec的標題
function fn spec的函數(shù)
expect 函數(shù) 接收一個 value, 返回一個鏈式匹配對象
擁有以下匹配規(guī)則函數(shù)
toBe // 引用全等
toEqual // 深度遍歷,值全等
toMatch // 正則匹配, 支持字符串和正則表達式
toContain (字符串, 數(shù)組)
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 函數(shù), 直接指定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 執(zhí)行后,it 執(zhí)行前調(diào)用)
afterEach (每一個 it 執(zhí)行后調(diào)用)
beforeAll (describe 執(zhí)行后,it 執(zhí)行前調(diào)用,只調(diào)用一次)
afterAll (所有 it執(zhí)行完成后調(diào)用)
this在beforeEach, it, afterEach, 共享獨立的空this對象
嵌套 describe塊beforeEach, afterEach 只針對同級describe函數(shù)作用域
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 函數(shù) 可以跳過當(dāng)前的測試套件
Pending Specs使用 xit表示 該行為測試待規(guī)范,跳過測試
SpiesspyOn函數(shù)具有監(jiān)控對象的函數(shù)是否調(diào)用的功能, spy化的對象函數(shù), 允許有以下的匹配函數(shù)
toHaveBeenCalled // 匹配是否調(diào)用
toHaveBeenCalledTimes // 匹配調(diào)用次數(shù)
toHaveBeenCalledWith // 匹配被調(diào)用的函數(shù)參數(shù)是否與預(yù)訂的一致
spy化后的函數(shù),可以指定執(zhí)行的返回值
var foo = { setBar: function(value) { bar = value; }, getBar: function() { return bar; } }; spyOn(foo, "getBar").and.returnValue(745); fetchedBar = foo.getBar(); // fetchBar is 745
spy化的函數(shù)
and.returnValue (返回值)
and.throwError (拋出異常)
and.callThrough (直接返回調(diào)用結(jié)果)
and.returnValues (返回一個數(shù)組)
and.callFake (通過回調(diào)篡改返回值)
and.stub (凍結(jié)spy化的函數(shù)執(zhí)行)
and.identity (返回一個name)
spy 其它跟蹤屬性
calls.any() (return true表示被調(diào)用過, return false 表示從未調(diào)用過)
calls.count() (返回調(diào)用的次數(shù))
calls.argsFor(index) (數(shù)組的形式返回某一次調(diào)用的入?yún)ⅲ?/p>
calls.allArgs() (二維數(shù)組的形式返回所有調(diào)用的入?yún)?
calls.all() (返回一個或多個{object: xx, args: [], returnValue: xx}的對象,多個由數(shù)組表示)
calls.mostRecent() (返回最近的一個調(diào)用上下文對象)
calls.first() (返回第一次調(diào)用的上下文對象)
calls.reset() (清空跟蹤數(shù)據(jù))
createSpy 與 createSpyObjspyOn 是基于操作對象的函數(shù)調(diào)用進行tracking, 而jasmine.createSpy則是創(chuàng)建一個空的tracking函數(shù), jasmine.createSpyObj 可以為創(chuàng)建一個對象,擁有多個tracking的函數(shù)
封裝匹配 value的函數(shù)jasmine.any (匹配相同class)
jasmine.anything (匹配 非 null, undefined 的所有值)
jasmine.objectContaining (匹配對象局部的key, value)
jasmine.arrayContaining (匹配數(shù)組的某些項)
jasmine.stringMatching (匹配局部字符串)
Custom asymmetric equality tester自定義匹配規(guī)則, 傳入一個對象, 對象中的 asymmetricMatch 是一個函數(shù),其中入?yún)⒈硎疽ε嗯嗟?b>value
Jasmine Clockjasmine.clock().install 時間記錄啟動, jasmine.clock().tick(millsecond) 多少毫秒后,調(diào)用后續(xù)的expect
Mocking the Date 異步支持 Asynchronous SupportbeforeAll, afterAll, beforeEach, afterEach, it 支持函數(shù)第一個參數(shù) done 進行回調(diào)
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 返回錯誤的執(zhí)行
相關(guān)資料BDD介紹
Jasmine文檔
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/85051.html
摘要:只測試指定測試套件同一層級中出現(xiàn)兩個測試將忽略同理,同一層級出現(xiàn)和,將會忽略案例忽略該測試忽略該測試忽略該測試自定義比較函數(shù)覆蓋比較函數(shù)在聲明周期使用,返回或,如果返回或則表示使用默認的進行比較自定義匹配規(guī)則在聲明周期使用加入自定義匹配規(guī)則 focus spec 只測試指定測試套件, 同一層級中出現(xiàn) it, fit 兩個測試 spec, 將忽略 it, 同理,同一層級出現(xiàn) descri...
摘要:只測試指定測試套件同一層級中出現(xiàn)兩個測試將忽略同理,同一層級出現(xiàn)和,將會忽略案例忽略該測試忽略該測試忽略該測試自定義比較函數(shù)覆蓋比較函數(shù)在聲明周期使用,返回或,如果返回或則表示使用默認的進行比較自定義匹配規(guī)則在聲明周期使用加入自定義匹配規(guī)則 focus spec 只測試指定測試套件, 同一層級中出現(xiàn) it, fit 兩個測試 spec, 將忽略 it, 同理,同一層級出現(xiàn) descri...
摘要:框架本身可以很好地支持自下而上的單元測試。在中,這些原因可以分為性能真實的操作,依靠定時行為及網(wǎng)絡(luò)活動減慢了測試隔離單元測試應(yīng)把重點放在小的一塊功能成為可能,并解耦不可靠的或低依賴使用對象是擁抱和的基本組成部分。 最近在慢慢深入Backbone,也試著寫一些測試,找一些合適的文檔來學(xué)習(xí)。于是就找到了一個系列的文章 : Testing Backbone applications with...
摘要:而測試驅(qū)動開發(fā)技術(shù)并不只是單純的測試工作。需求向來就是軟件開發(fā)過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構(gòu)這個詞, 第一反應(yīng)是: 前端還有架構(gòu)這一說呢? 在后端開發(fā)領(lǐng)域, 系統(tǒng)規(guī)劃和可擴展性非常關(guān)鍵, 因此架構(gòu)師備受重視, 早在開發(fā)工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...
摘要:而測試驅(qū)動開發(fā)技術(shù)并不只是單純的測試工作。需求向來就是軟件開發(fā)過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構(gòu)這個詞, 第一反應(yīng)是: 前端還有架構(gòu)這一說呢? 在后端開發(fā)領(lǐng)域, 系統(tǒng)規(guī)劃和可擴展性非常關(guān)鍵, 因此架構(gòu)師備受重視, 早在開發(fā)工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...
閱讀 2423·2021-10-09 09:59
閱讀 2177·2021-09-23 11:30
閱讀 2591·2019-08-30 15:56
閱讀 1145·2019-08-30 14:00
閱讀 2939·2019-08-29 12:37
閱讀 1253·2019-08-28 18:16
閱讀 1656·2019-08-27 10:56
閱讀 1022·2019-08-26 17:23