成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

JowayYoung / 1870人閱讀

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

介紹

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

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

Suites and Specs

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

string name 一個(gè)測(cè)試套件的名稱

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

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

string name spec的標(biāo)題

function fn spec的函數(shù)

expect 函數(shù) 接收一個(gè) value, 返回一個(gè)鏈?zhǔn)狡ヅ鋵?duì)象
擁有以下匹配規(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的錯(cuò)誤原因

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");
    });
  });
});

一個(gè)suite 可以有多個(gè) describe, 一個(gè) describe 可以有多個(gè) it, 一個(gè)it 可以有多個(gè) expect

任何匹配表達(dá)式都可以有not前綴對(duì)象, 表示與期待的相反. 如

describe("a suite", function () {
    it("should not equal false if expect is true", function () {
        expect(true).not.toBe(false);
    });
});
Setup and Teardown

在一個(gè)describe中, 單元測(cè)試中的的 多個(gè)it, 有共同的需要初始化的情況。集中初始化和卸載

beforeEach (describe 執(zhí)行后,it 執(zhí)行前調(diào)用)

afterEach (每一個(gè) it 執(zhí)行后調(diào)用)

beforeAll (describe 執(zhí)行后,it 執(zhí)行前調(diào)用,只調(diào)用一次)

afterAll (所有 it執(zhí)行完成后調(diào)用)

this

beforeEach, it, afterEach, 共享獨(dú)立的空this對(duì)象

嵌套 describe

beforeEach, afterEach 只針對(duì)同級(jí)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ù) 可以跳過(guò)當(dāng)前的測(cè)試套件

Pending Specs

使用 xit表示 該行為測(cè)試待規(guī)范,跳過(guò)測(cè)試

Spies

spyOn函數(shù)具有監(jiān)控對(duì)象的函數(shù)是否調(diào)用的功能, spy化的對(duì)象函數(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 (返回一個(gè)數(shù)組)

and.callFake (通過(guò)回調(diào)篡改返回值)

and.stub (凍結(jié)spy化的函數(shù)執(zhí)行)

and.identity (返回一個(gè)name)

spy 其它跟蹤屬性

calls.any() (return true表示被調(diào)用過(guò), return false 表示從未調(diào)用過(guò))

calls.count() (返回調(diào)用的次數(shù))

calls.argsFor(index) (數(shù)組的形式返回某一次調(diào)用的入?yún)ⅲ?/p>

calls.allArgs() (二維數(shù)組的形式返回所有調(diào)用的入?yún)?

calls.all() (返回一個(gè)或多個(gè){object: xx, args: [], returnValue: xx}的對(duì)象,多個(gè)由數(shù)組表示)

calls.mostRecent() (返回最近的一個(gè)調(diào)用上下文對(duì)象)

calls.first() (返回第一次調(diào)用的上下文對(duì)象)

calls.reset() (清空跟蹤數(shù)據(jù))

createSpy 與 createSpyObj

spyOn 是基于操作對(duì)象的函數(shù)調(diào)用進(jìn)行tracking, 而jasmine.createSpy則是創(chuàng)建一個(gè)空的tracking函數(shù), jasmine.createSpyObj 可以為創(chuàng)建一個(gè)對(duì)象,擁有多個(gè)tracking的函數(shù)

封裝匹配 value的函數(shù)

jasmine.any (匹配相同class)

jasmine.anything (匹配 非 null, undefined 的所有值)

jasmine.objectContaining (匹配對(duì)象局部的key, value)

jasmine.arrayContaining (匹配數(shù)組的某些項(xiàng))

jasmine.stringMatching (匹配局部字符串)

Custom asymmetric equality tester

自定義匹配規(guī)則, 傳入一個(gè)對(duì)象, 對(duì)象中的 asymmetricMatch 是一個(gè)函數(shù),其中入?yún)⒈硎疽ε嗯嗟?b>value

Jasmine Clock

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

Mocking the Date 異步支持 Asynchronous Support

beforeAll, afterAll, beforeEach, afterEach, it 支持函數(shù)第一個(gè)參數(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 返回錯(cuò)誤的執(zhí)行

相關(guān)資料

BDD介紹

Jasmine文檔

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/85051.html

相關(guān)文章

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

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

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

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

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

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

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

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

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

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

    宋華 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<