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

資訊專欄INFORMATION COLUMN

Sinon

since1986 / 3283人閱讀

摘要:完成后一定要否則會(huì)影響其他的測(cè)試的作用在于可以監(jiān)視一個(gè)函數(shù)被調(diào)用的情況。在中用于對(duì)一個(gè)的活動(dòng)進(jìn)行監(jiān)視。而出的收到了數(shù)據(jù)或是調(diào)用并沒有真正執(zhí)行,一切針對(duì)的調(diào)用都是假的。對(duì)相關(guān)的測(cè)試也提供了模擬功能。

Sinon.js是個(gè)測(cè)試輔助工具,在為Node程序?qū)憸y(cè)試時(shí)可能可以派上用場(chǎng)。 在測(cè)試領(lǐng)域有這么幾個(gè)基本名詞:spy, stub, mock,這三個(gè)概念都是測(cè)試所用到的手段。Sinon.js就提供了相應(yīng)的工具來實(shí)現(xiàn)這三種測(cè)試手段。

sinon.stub() 完成后一定要sinon.restore(),否則會(huì)影響其他的測(cè)試

spy

spy的作用在于可以監(jiān)視一個(gè)函數(shù)被調(diào)用的情況。spy相當(dāng)于給我們感興趣的函數(shù)加了一層wrapper,于是記錄下了這個(gè)函數(shù)被調(diào)用過幾次,每次傳入的參數(shù)是什么以及每次返回的結(jié)果是什么,或是拋出了怎樣的異常。

var sinon = require("sinon");
sinon.spy(crawler, "launch"); // 監(jiān)視crawler.launch,這是個(gè)function

// 對(duì)crawler.launch進(jìn)行調(diào)用

crawler.launch.callCount > 1; // 該函數(shù)的調(diào)用次數(shù)
crawler.launch.withArgs("...").calledOnce; // 該函數(shù)是否以...參數(shù)調(diào)用過一次

crawler.launch.restore(); // 消除監(jiān)視(測(cè)完換回去)
stub

測(cè)試中有可能遇到這樣的情形:測(cè)試函數(shù)f1,f1依賴于函數(shù)f2,我們需要測(cè)試f1在f2的不同表現(xiàn)之下有怎樣的表現(xiàn)。但是讓f2有不同的表現(xiàn)可能會(huì)很不容易,有可能需要復(fù)雜的配置或是精巧的捏造,或是f2出現(xiàn)某種表現(xiàn)的幾率很小等等。這時(shí)stub就可派上用場(chǎng),stub就是人為設(shè)定的f2的替代品。我們可以設(shè)定stub在怎樣的輸入下有怎樣特定的表現(xiàn),從而不再阻礙對(duì)f1的測(cè)試。

var sinon = require("sinon");

var stub = sinon.stub(); // 創(chuàng)建一個(gè)stub
var stub = sinon.stub(ab, "f"); // 將ab.f替換成一個(gè)stub,使用完畢后需要調(diào)用stub.restore()或ab.f.restore()來復(fù)原
var stub = sinon.stub(ab, "f", function(...) {...}); // 將ab.f替換成指定的函數(shù)

stub.returns(10);
stub(); // stub()總是返回10

stub.throws("...");
stub(); // stub()總是拋出"..."

stub.withArgs(1).returns(10);
stub(1); // stub(1)會(huì)返回10

stub.restore();

在Sinon.js中,stub本身也是個(gè)spy,所以可以在stub上調(diào)用之前提到的 .callCount 等查看函數(shù)調(diào)用情況。

mock

mock在Sinon.js中用于對(duì)一個(gè)object的活動(dòng)進(jìn)行監(jiān)視。一個(gè)object被mock以后,就可以設(shè)定我們對(duì)這個(gè)object有怎樣的預(yù)期。這里的預(yù)期例如:某方法被調(diào)用了多少次(或至少至多多少次)、某方法一定沒被調(diào)用、某方法被輸入怎樣的參數(shù)來調(diào)用、等等??梢钥闯鰉ock對(duì)一個(gè)object的監(jiān)視類似于spy對(duì)一個(gè)函數(shù)的監(jiān)視。兩者的關(guān)鍵區(qū)別在于使用場(chǎng)景,spy客觀地監(jiān)視了一個(gè)函數(shù)的表現(xiàn),對(duì)這個(gè)函數(shù)的調(diào)用都真正執(zhí)行了。而mock出的object收到了數(shù)據(jù)或是調(diào)用并沒有真正執(zhí)行,一切針對(duì)mock的調(diào)用都是假的。所以mock可以用來測(cè)試具有side effect的函數(shù),這里的side effect泛指和外部對(duì)象有數(shù)據(jù)交互或者是調(diào)用,比如調(diào)用外部對(duì)象的方法、向server發(fā)送數(shù)據(jù)、和UI對(duì)象有交互、寫日志等等。

var sinon = require("sinon");

var obj = {
  ...
};

var mock = sinon.mock(obj);
mock.expect("f").atLeast(2).withArgs(10); // obj.f(10)調(diào)用至少出現(xiàn)過2次

...

mock.verify(); // 測(cè)試此時(shí)的obj是否滿足上面的mock設(shè)定條件
mock.restore();
其他問題

Sinon.js提供了模擬時(shí)間流逝的功能,但似乎并不好用。對(duì)于定時(shí)事件的觸發(fā)會(huì)產(chǎn)生怎樣的影響,還是先寫點(diǎn)測(cè)試代碼看清楚結(jié)果再用為好。

Sinon.js對(duì)Ajax call相關(guān)的測(cè)試也提供了模擬功能。

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

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

相關(guān)文章

  • 提高代碼質(zhì)量——使用Jest和Sinon給已有的代碼添加單元測(cè)試

    摘要:現(xiàn)在,我們可以使用單元測(cè)試來提高自己的代碼質(zhì)量。它在單元測(cè)試的編寫中通常用來模擬等相關(guān)請(qǐng)求。通過這篇文章,你應(yīng)該學(xué)會(huì)了如何針對(duì)已有代碼從零開始編寫一套完整的單元測(cè)試用例。 概述 在日常的功能開發(fā)中,我們的代碼測(cè)試都依賴于自己或者QA進(jìn)行測(cè)試。這些操作不僅費(fèi)時(shí)費(fèi)力,而且還依賴開發(fā)者自身的驅(qū)動(dòng)。在開發(fā)一些第三方依賴的庫(kù)時(shí),我們也沒有辦法給第三方提供完整的代碼質(zhì)量報(bào)告。 現(xiàn)在,我們可以使用單...

    voyagelab 評(píng)論0 收藏0
  • 如何使用 mocha 和 sinon 集成單元測(cè)試--單元測(cè)試示例及分析(上)

    摘要:使用集成單元測(cè)試上項(xiàng)目地址安裝依賴測(cè)試框架可視化報(bào)表覆蓋率替換依賴斷言命令命令命令執(zhí)行單元測(cè)試,并打開測(cè)試報(bào)告頁(yè)面和覆蓋率頁(yè)面執(zhí)行生成單元測(cè)試覆蓋率并打開執(zhí)行單個(gè)單元測(cè)試文 使用 mocha 集成單元測(cè)試(上) 項(xiàng)目地址:https://github.com/Jay-tian/j... 安裝依賴 yarn add jquery mocha mochawesome istanbu...

    Caicloud 評(píng)論0 收藏0
  • 【Node Hero】9. Node.js 單元測(cè)試

    摘要:基本上,測(cè)試金字塔描述你應(yīng)該編寫單元測(cè)試集成測(cè)試和端到端測(cè)試。集成測(cè)試要比端到端測(cè)試多,單元測(cè)試甚至要更多一些。應(yīng)用程序單元測(cè)試編寫單元測(cè)試,是為了看看給定的模塊單元是否工作。 本文轉(zhuǎn)載自:眾成翻譯譯者:網(wǎng)絡(luò)埋伏紀(jì)事鏈接:http://www.zcfy.cc/article/1754原文:https://blog.risingstack.com/node-hero-node-js-un...

    104828720 評(píng)論0 收藏0
  • mocha、chai、sinon和istanbul實(shí)現(xiàn)100%單元測(cè)試覆蓋率

    摘要:加上測(cè)試覆蓋率檢查,就能夠提供足夠的信息,來斷言代碼的行為是否符合期望。測(cè)試的相關(guān)技術(shù)是程序的代碼覆蓋率工具,以土耳其最大城市伊斯坦布爾命名。 showImg(https://segmentfault.com/img/remote/1460000010260434); 敏捷軟件開發(fā)中,最重要實(shí)踐的就是測(cè)試驅(qū)動(dòng)開發(fā),在單元測(cè)試層面,我們?cè)囍鴮?shí)現(xiàn)一個(gè)重要的指標(biāo)就是測(cè)試覆蓋率。測(cè)試覆蓋率衡量...

    Yuanf 評(píng)論0 收藏0
  • 使用karma+mocha+chai+sinon+@vue/test-utils為你的組件庫(kù)增加單元

    摘要:但是,項(xiàng)目中的一些公共封裝,比如公共的組件公用的功能模塊等是可以使用單元測(cè)試的。因此特為組件庫(kù)引入單元測(cè)試,目的在于能減少組件的,避免重復(fù)的發(fā)布不必要的包。 項(xiàng)目github地址:https://github.com/yuanalina/installAsRequired這里必須要提前說明,前端項(xiàng)目的單元測(cè)試不是必須的,特別是業(yè)務(wù)型項(xiàng)目,增加單元測(cè)試反而會(huì)成為累贅,增加開發(fā)成本且無意義...

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

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

0條評(píng)論

閱讀需要支付1元查看
<