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

資訊專欄INFORMATION COLUMN

Jasmine單元測(cè)試框架使用基本介紹

xiaokai / 2432人閱讀

摘要:背景最近負(fù)責(zé)一個(gè)需求,使用到了測(cè)試框架做單元測(cè)試介紹就是一種單元測(cè)試框架,它不依賴任何其他框架,也不需要對(duì)操作,具有靈巧而明確的語(yǔ)法可以讓你輕松的編寫測(cè)試代碼。布爾測(cè)試,判斷值是否是,或者可以轉(zhuǎn)換為。

背景

最近負(fù)責(zé)一個(gè)需求,使用到了jasmine測(cè)試框架做單元測(cè)試

介紹

Jasmine就是一種JavaScript單元測(cè)試框架,它不依賴任何其他JS框架,也不需要對(duì)DOM操作,具有靈巧而明確的語(yǔ)法可以讓你輕松的編寫測(cè)試代碼。它是一套Javascript行為驅(qū)動(dòng)開發(fā)框架(BDD),干凈簡(jiǎn)潔,表達(dá)力強(qiáng)且易于組織,不依賴于其他任何框架和DOM,可運(yùn)行于Node.js,瀏覽器端或移動(dòng)端。
Jasmine官網(wǎng)
Jasmine github

Jasmine的基礎(chǔ)語(yǔ)法

Suites
Suites可以理解為一組測(cè)試,使用全局的Jasmin函數(shù)describe 創(chuàng)建。describe 函數(shù)接受兩個(gè)參數(shù),一個(gè)字符串和一個(gè)函數(shù)。字符串是這個(gè)Suites的名字或標(biāo)題(通常描述下測(cè)試內(nèi)容),函數(shù)是實(shí)現(xiàn)Suites的代碼塊。

Specs
Specs可以理解為一個(gè)測(cè)試,使用全局的Jasmin函數(shù)it 創(chuàng)建。和describe 一樣接受兩個(gè)參數(shù),一個(gè)字符串和一個(gè)函數(shù),函數(shù)就是要執(zhí)行的測(cè)試,字符串就是測(cè)試的名字。一個(gè)Spec可以包含多個(gè)expectations來(lái)測(cè)試代碼。在Jasmine中,一個(gè)expectations就是一個(gè)斷言,只能是true 或false 。只有全部expectations是true 的時(shí)候spec才會(huì)通過(guò)。

由于describe 和it 塊實(shí)質(zhì)上都函數(shù),所有他可以包含任何的可執(zhí)行代碼。javascript的作用域規(guī)則也是適用的,所以describe 內(nèi)定義的變量,其內(nèi)部所有的it 都能訪問(wèn)到。

Expectations
expectations由expect 函數(shù)創(chuàng)建。接受一個(gè)參數(shù)。和Matcher一起聯(lián)用,設(shè)置測(cè)試的預(yù)期值。

Matchers

在Jasmine中,每個(gè)Matcher實(shí)現(xiàn)一個(gè)“期望值”和“實(shí)際值”的布爾判斷,Jasmine會(huì)根據(jù)Mather判斷expectation是true 還是false ,然后決定spec是測(cè)試通過(guò)還是失敗。所有Matcher可以通過(guò)not 執(zhí)行否定判斷。

基礎(chǔ)matchers

toBe():相當(dāng)于===比較。

toNotBe()

toBeDefined():檢查變量或?qū)傩允欠褚崖暶髑屹x值。

toBeUndefined()

toBeNull():是否是null。

toBeTruthy():布爾測(cè)試,判斷值是否是,或者可以轉(zhuǎn)換為true。

toBeFalsy()

toBeLessThan():數(shù)值比較,小于。

toBeGreaterThan():數(shù)值比較,大于。

toEqual():相當(dāng)于==,注意與toBe()的區(qū)別。

一個(gè)新建的Object不是(not to be)另一個(gè)新建的Object,但是它們是相等(to equal)的。

expect({}).not().toBe({});
expect({}).toEqual({});

toNotEqual()

toContain():數(shù)組中是否包含元素(值)。只能用于數(shù)組,不能用于對(duì)象。

toBeCloseTo():是比較兩個(gè)值是否足夠接近(不一定要相等)。

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

比如第二個(gè)expect就是如果pi-e的絕對(duì)值小于10的-0次方除以2的值,斷言通過(guò)

toMatch():按正則表達(dá)式匹配。

toNotMatch()

toThrow():檢驗(yàn)一個(gè)函數(shù)是否會(huì)拋出一個(gè)錯(cuò)誤

it("toThrow判斷一個(gè)函數(shù)是否有拋出異常", 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)
傳入構(gòu)造函數(shù)或者類返回?cái)?shù)據(jù)類型作為期望值,返回true表示實(shí)際值和期望值數(shù)據(jù)類型相同:

it("matches any value", function() {  
    expect({}).toEqual(jasmine.any(Object));
    expect(12).toEqual(jasmine.any(Number));
});

jasmine.anything()
如果實(shí)際值不是null或者undefined則返回true:

it("matches anything", function() {  
    expect(1).toEqual(jasmine.anything());
});

jasmine.objectContaining({key:value})
實(shí)際對(duì)象只要匹配到有對(duì)應(yīng)的鍵/值就算匹配通過(guò):

foo = {  
      a: 1,
      b: 2,
      bar: "baz"
};
expect(foo).toEqual(jasmine.objectContaining({bar: "baz"})); 

jasmine.arrayContaining([val1,val2,...])
實(shí)際數(shù)組只要匹配到有包含的數(shù)值就算匹配通過(guò):

foo = [1, 2, 3, 4];  
expect(foo).toEqual(jasmine.arrayContaining([3, 1]));  

jasmine.stringContaining(str)
stringContaining可以匹配字符串的一部分也可以匹配對(duì)象內(nèi)的字符串:

expect({foo: "bar"}).toEqual({foo: jasmine.stringMatching(/^bar$/)});  
expect("foobarbaz").toEqual({foo: jasmine.stringMatching("bar")}); 

Setup and Teardown

為了在復(fù)雜的測(cè)試用例中更加便于組裝和拆卸,Jasmine提供了四個(gè)函數(shù):

beforeEach(function) //在每一個(gè)測(cè)試用例(it)執(zhí)行之前都執(zhí)行一遍beforeEach函數(shù);
afterEach(function) //在每一個(gè)測(cè)試用例(it)執(zhí)行完成之后都執(zhí)行一遍afterEach函數(shù);
beforeAll(function) //在所有測(cè)試用例執(zhí)行之前執(zhí)行一遍beforeAll函數(shù);
afterAll(function) //在所有測(cè)試用例執(zhí)行完成之后執(zhí)行一遍afterAll函數(shù);

jasmine還有自定義matcher的功能和一些高級(jí)功能,暫時(shí)沒(méi)有用到,有機(jī)會(huì)學(xué)習(xí)下

參考資料

JavaScript單元測(cè)試框架——Jasmine入門
JavaScript 單元測(cè)試框架:Jasmine 初探

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/80001.html

相關(guān)文章

  • 關(guān)于前端開發(fā)談?wù)?em>單元測(cè)試

    摘要:很快我發(fā)現(xiàn)有一個(gè)誤區(qū),許多人認(rèn)為單元測(cè)試必須是一個(gè)集中運(yùn)行所有單元的測(cè)試,并一目了然。許多人認(rèn)為單元測(cè)試,甚至整個(gè)測(cè)試都是在編碼結(jié)束后的一道工序,而修復(fù)也不過(guò)是在做垃圾掩埋一類的工作。 單元測(cè)試Unit Test 很早就知道單元測(cè)試這樣一個(gè)概念,但直到幾個(gè)月前,我真正開始接觸和使用它。究竟什么是單元測(cè)試?我想也許很多使用了很久的人也不一定能描述的十分清楚,所以寫了這篇文章來(lái)嘗試描述它...

    0x584a 評(píng)論0 收藏0
  • Angular單元測(cè)試系列-簡(jiǎn)介

    摘要:?jiǎn)卧獪y(cè)試我們可以將其分成兩類獨(dú)立單獨(dú)測(cè)試與測(cè)試工具集。工具集還有更多,這一切我們將在單元測(cè)試組件與指令單元測(cè)試逐一說(shuō)明。那么下一篇,我們將介紹如何使用進(jìn)行單元測(cè)試。 本文將探討如何搭建測(cè)試環(huán)境、以及Angular測(cè)試工具集。 測(cè)試環(huán)境 絕大部分都是利用Angular Cli來(lái)創(chuàng)建項(xiàng)目,因此,默認(rèn)已經(jīng)集成我們所需要的npm包與腳本;當(dāng)然,如果你是使用自建或官網(wǎng) quickstart 的話...

    CNZPH 評(píng)論0 收藏0
  • [譯]開始對(duì)Angular App進(jìn)行單元測(cè)試(1)

    摘要:小結(jié)我們初步了解了使用來(lái)進(jìn)行測(cè)試,這樣有利于我們接下來(lái)去理解使用進(jìn)行單元測(cè)試翻譯中 showImg(https://segmentfault.com/img/bVxI9p); 這是一些列文章,陸續(xù)翻譯整理中... 原文地址:http://www.bradoncode.com/blog/2015/05/12/angularjs-testing-getting-started/ @ Bra...

    Tikitoo 評(píng)論0 收藏0
  • 譯:你該使用什么單元測(cè)試,Qunit、Jasmine還是Mocha?

    摘要:不論你是在寫瀏覽器端還是后端的,總存在那么一個(gè)問(wèn)題我該使用什么單元測(cè)試庫(kù)去確保我的代碼如預(yù)期的運(yùn)行呢總是有那么一些流行的框架可供選擇。在中仍然流行,并且擁有來(lái)自許多地方性的支持。如果你的測(cè)試使用它,直到調(diào)用了才能通過(guò)。 不論你是在寫瀏覽器端javascript還是后端的nodejs,總存在那么一個(gè)問(wèn)題:我該使用什么單元測(cè)試庫(kù)去確保我的代碼如預(yù)期的運(yùn)行呢?總是有那么一些流行的框架可供選擇...

    Forelax 評(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,也試著寫一些測(cè)試,找一些合適的文檔來(lái)學(xué)習(xí)。于是就找到了一個(gè)系列的文章 : Testing Backbone applications with...

    ralap 評(píng)論0 收藏0

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

0條評(píng)論

閱讀需要支付1元查看
<