国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Sinon

since1986 / 3209人閱讀

摘要:完成后一定要否則會影響其他的測試的作用在于可以監視一個函數被調用的情況。在中用于對一個的活動進行監視。而出的收到了數據或是調用并沒有真正執行,一切針對的調用都是假的。對相關的測試也提供了模擬功能。

Sinon.js是個測試輔助工具,在為Node程序寫測試時可能可以派上用場。 在測試領域有這么幾個基本名詞:spy, stub, mock,這三個概念都是測試所用到的手段。Sinon.js就提供了相應的工具來實現這三種測試手段。

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

spy

spy的作用在于可以監視一個函數被調用的情況。spy相當于給我們感興趣的函數加了一層wrapper,于是記錄下了這個函數被調用過幾次,每次傳入的參數是什么以及每次返回的結果是什么,或是拋出了怎樣的異常。

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

// 對crawler.launch進行調用

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

crawler.launch.restore(); // 消除監視(測完換回去)
stub

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

var sinon = require("sinon");

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

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

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

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

stub.restore();

在Sinon.js中,stub本身也是個spy,所以可以在stub上調用之前提到的 .callCount 等查看函數調用情況。

mock

mock在Sinon.js中用于對一個object的活動進行監視。一個object被mock以后,就可以設定我們對這個object有怎樣的預期。這里的預期例如:某方法被調用了多少次(或至少至多多少次)、某方法一定沒被調用、某方法被輸入怎樣的參數來調用、等等。可以看出mock對一個object的監視類似于spy對一個函數的監視。兩者的關鍵區別在于使用場景,spy客觀地監視了一個函數的表現,對這個函數的調用都真正執行了。而mock出的object收到了數據或是調用并沒有真正執行,一切針對mock的調用都是假的。所以mock可以用來測試具有side effect的函數,這里的side effect泛指和外部對象有數據交互或者是調用,比如調用外部對象的方法、向server發送數據、和UI對象有交互、寫日志等等。

var sinon = require("sinon");

var obj = {
  ...
};

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

...

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

Sinon.js提供了模擬時間流逝的功能,但似乎并不好用。對于定時事件的觸發會產生怎樣的影響,還是先寫點測試代碼看清楚結果再用為好。

Sinon.js對Ajax call相關的測試也提供了模擬功能。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92610.html

相關文章

  • 提高代碼質量——使用Jest和Sinon給已有的代碼添加單元測試

    摘要:現在,我們可以使用單元測試來提高自己的代碼質量。它在單元測試的編寫中通常用來模擬等相關請求。通過這篇文章,你應該學會了如何針對已有代碼從零開始編寫一套完整的單元測試用例。 概述 在日常的功能開發中,我們的代碼測試都依賴于自己或者QA進行測試。這些操作不僅費時費力,而且還依賴開發者自身的驅動。在開發一些第三方依賴的庫時,我們也沒有辦法給第三方提供完整的代碼質量報告。 現在,我們可以使用單...

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

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

    Caicloud 評論0 收藏0
  • 【Node Hero】9. Node.js 單元測試

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

    104828720 評論0 收藏0
  • mocha、chai、sinon和istanbul實現100%單元測試覆蓋率

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

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

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

    happen 評論0 收藏0

發表評論

0條評論

since1986

|高級講師

TA的文章

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