成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【Jasmine】行為驅(qū)動測試框架 基礎(chǔ)教程

JowayYoung / 1811人閱讀

摘要:介紹是基于測試框架行為驅(qū)動測試的定義它是通過用自然語言書寫非程序員可讀的測試用例擴(kuò)展了測試驅(qū)動開發(fā)方法行為驅(qū)動開發(fā)人員使用混合了領(lǐng)域中統(tǒng)一的語言的母語語言來描述他們的代碼的目的函數(shù)包含兩個參數(shù)一個測試套件的名稱實(shí)現(xiàn)測試套件的代碼塊函數(shù)定義

介紹

Jasmine 是基于 BBD (behavior-driven development)測試框架

行為驅(qū)動測試的定義:它是通過用自然語言書寫非程序員可讀的測試用例擴(kuò)展了測試驅(qū)動開發(fā)方法, 行為驅(qū)動開發(fā)人員使用混合了領(lǐng)域中統(tǒng)一的語言的母語語言來描述他們的代碼的目的

Suites and Specs

describe 函數(shù)包含兩個參數(shù)

string name 一個測試套件的名稱

function fn 實(shí)現(xiàn)測試套件的代碼塊

it 函數(shù)定義兩個參數(shù)

string name spec的標(biāo)題

function fn spec的函數(shù)

expect 函數(shù) 接收一個 value, 返回一個鏈?zhǔn)狡ヅ鋵ο?br>擁有以下匹配規(guī)則函數(shù)

toBe // 引用全等

toEqual // 深度遍歷,值全等

toMatch // 正則匹配, 支持字符串和正則表達(dá)式

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

任何匹配表達(dá)式都可以有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, 共享獨(dú)立的空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ī)范,跳過測試

Spies

spyOn函數(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 與 createSpyObj

spyOn 是基于操作對象的函數(shù)調(diào)用進(jìn)行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 Clock

jasmine.clock().install 時間記錄啟動, jasmine.clock().tick(millsecond) 多少毫秒后,調(diào)用后續(xù)的expect

Mocking the Date 異步支持 Asynchronous Support

beforeAll, afterAll, beforeEach, afterEach, it 支持函數(shù)第一個參數(shù) done 進(jìn)行回調(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://systransis.cn/yun/85051.html

相關(guān)文章

  • Jasmine行為驅(qū)動測試框架 -- 擴(kuò)展教程

    摘要:只測試指定測試套件同一層級中出現(xiàn)兩個測試將忽略同理,同一層級出現(xiàn)和,將會忽略案例忽略該測試忽略該測試忽略該測試自定義比較函數(shù)覆蓋比較函數(shù)在聲明周期使用,返回或,如果返回或則表示使用默認(rèn)的進(jìn)行比較自定義匹配規(guī)則在聲明周期使用加入自定義匹配規(guī)則 focus spec 只測試指定測試套件, 同一層級中出現(xiàn) it, fit 兩個測試 spec, 將忽略 it, 同理,同一層級出現(xiàn) descri...

    Rocko 評論0 收藏0
  • Jasmine行為驅(qū)動測試框架 -- 擴(kuò)展教程

    摘要:只測試指定測試套件同一層級中出現(xiàn)兩個測試將忽略同理,同一層級出現(xiàn)和,將會忽略案例忽略該測試忽略該測試忽略該測試自定義比較函數(shù)覆蓋比較函數(shù)在聲明周期使用,返回或,如果返回或則表示使用默認(rèn)的進(jìn)行比較自定義匹配規(guī)則在聲明周期使用加入自定義匹配規(guī)則 focus spec 只測試指定測試套件, 同一層級中出現(xiàn) it, fit 兩個測試 spec, 將忽略 it, 同理,同一層級出現(xiàn) descri...

    張率功 評論0 收藏0
  • Jasmine和Sinon測試Backbone應(yīng)用 (譯)

    摘要:框架本身可以很好地支持自下而上的單元測試。在中,這些原因可以分為性能真實(shí)的操作,依靠定時行為及網(wǎng)絡(luò)活動減慢了測試隔離單元測試應(yīng)把重點(diǎn)放在小的一塊功能成為可能,并解耦不可靠的或低依賴使用對象是擁抱和的基本組成部分。 最近在慢慢深入Backbone,也試著寫一些測試,找一些合適的文檔來學(xué)習(xí)。于是就找到了一個系列的文章 : Testing Backbone applications with...

    ralap 評論0 收藏0
  • 前端進(jìn)階之路: 前端架構(gòu)設(shè)計(3) - 測試核心

    摘要:而測試驅(qū)動開發(fā)技術(shù)并不只是單純的測試工作。需求向來就是軟件開發(fā)過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構(gòu)這個詞, 第一反應(yīng)是: 前端還有架構(gòu)這一說呢? 在后端開發(fā)領(lǐng)域, 系統(tǒng)規(guī)劃和可擴(kuò)展性非常關(guān)鍵, 因此架構(gòu)師備受重視, 早在開發(fā)工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...

    Karuru 評論0 收藏0
  • 前端進(jìn)階之路: 前端架構(gòu)設(shè)計(3) - 測試核心

    摘要:而測試驅(qū)動開發(fā)技術(shù)并不只是單純的測試工作。需求向來就是軟件開發(fā)過程中感覺最不好明確描述易變的東西。這里說的需求不只是指用戶的需求,還包括對代碼 可能很多人和我一樣, 首次聽到前端架構(gòu)這個詞, 第一反應(yīng)是: 前端還有架構(gòu)這一說呢? 在后端開發(fā)領(lǐng)域, 系統(tǒng)規(guī)劃和可擴(kuò)展性非常關(guān)鍵, 因此架構(gòu)師備受重視, 早在開發(fā)工作啟動之前, 他們就被邀請加入到項目中, 而且他們會跟客戶討論即將建成的平臺的...

    宋華 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<