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

資訊專(zhuān)欄INFORMATION COLUMN

NPM測(cè)試模塊之rewire教程

zxhaaa / 447人閱讀

摘要:在玩轉(zhuǎn)單元測(cè)試,我介紹了個(gè)用于編寫(xiě)測(cè)試代碼的模塊以及。為了慫恿大家寫(xiě)單元測(cè)試,我再介紹一款神奇的測(cè)試模塊。顧名思義,這兩個(gè)函數(shù)可以分別用于獲取和修改模塊中的變量函數(shù)。另外,模塊還提供了接口,可以用于一次性重寫(xiě)私有變量函數(shù)。

摘要:有了rewire模塊,再也不用擔(dān)心測(cè)試私有函數(shù)了。

在玩轉(zhuǎn)Node.js單元測(cè)試,我介紹了3個(gè)用于編寫(xiě)測(cè)試代碼的NPM模塊:Mocha, Should以及SuperTest。為了慫恿大家寫(xiě)單元測(cè)試,我再介紹一款神奇的NPM測(cè)試模塊:rewire。

GitHub倉(cāng)庫(kù): Fundebug/rewire-tutorial

rewire原理

對(duì)于技術(shù),知其然,也應(yīng)該知其所以然。

對(duì)于rewire,它的基本功能與require相同,都是用于導(dǎo)入模塊,只是,它會(huì)為導(dǎo)入的模塊添加兩個(gè)特殊的函數(shù):__get____set__。顧名思義,這兩個(gè)函數(shù)可以分別用于獲取和修改模塊中的變量/函數(shù)。測(cè)試的時(shí)候,當(dāng)我們需要獲取或者重寫(xiě)私有變量/函數(shù),rewire非常有用。

__get__: 獲取私有變量/函數(shù)

下面是需要測(cè)試的代碼示例1:

// 公有函數(shù)add
function add(a, b)
{
    return a + b;
}

// 私有函數(shù)sub
function sub(a, b)
{
    return a - b;
}

exports.add = add;

可知,add為公有函數(shù),而sub為私有函數(shù)。

測(cè)試公有函數(shù)add時(shí),非常方便,require之后可以直接獲取:

// 測(cè)試公有函數(shù)add
var assert  = require("assert");
var add = require("../test1.js").add;

it("1加1等于2", function()
{
    var result = add(1, 1);
    assert.equal(result, 2);
});

但是,測(cè)試私有函數(shù)sub時(shí),使用require是無(wú)法獲取的。這時(shí),可以使用rewire導(dǎo)入模塊,然后使用其提供的__get__方法獲取私有函數(shù):

// 測(cè)試私有函數(shù)sub
var assert  = require("assert");
var rewire = require("rewire");
var sub = rewire("../test1.js").__get__("sub");

it("2減1等于1", function()
{
    var result = sub(2, 1);
    assert.equal(result, 1);
});

在編寫(xiě)模塊的時(shí)候,難免存在一些私有變量或者函數(shù),有了rewire,我們就可以方便地獲取,然后進(jìn)行測(cè)試。

Fundebug是全棧JavaScript錯(cuò)誤監(jiān)控平臺(tái),支持各種前端和后端框架,可以幫助您第一時(shí)間發(fā)現(xiàn)BUG!

__set__: 重寫(xiě)私有變量/函數(shù)

下面是需要測(cè)試代碼示例2:

var fs = require("fs")

function add(a, b)
{
    let result = a + b;
    fs.writeFileSync("result.txt", result);
    return result;
}

exports.add = add;

可知,如果直接測(cè)試的話,add函數(shù)的計(jì)算結(jié)果會(huì)寫(xiě)入result.txt文件:

var assert = require("assert");
var add = require("../test2.js").add;

it("1加1等于2", function()
{
    let result = add(1, 2);
    assert.equal(result, 3);
});

但是,當(dāng)我們測(cè)試時(shí),并不希望去寫(xiě)磁盤(pán),因?yàn)楫?dāng)內(nèi)容很多時(shí),這樣比較浪費(fèi)時(shí)間。這時(shí),我們可以使用rewire導(dǎo)入模塊,然后使用其提供的__set__來(lái)重寫(xiě)fs模塊,避免真的去寫(xiě)磁盤(pán):

var assert = require("assert");
var rewire = require("rewire");
var myModule = rewire("../test2.js")
var add = myModule.add;

var fsMock = {
    writeFileSync: function(file, data, option) { /* 啥也不干 */ }
};

myModule.__set__("fs", fsMock);

it("1加1等于2", function()
{
    let result = add(1, 2);
    assert.equal(result, 3);
});

在實(shí)踐中,為了簡(jiǎn)化測(cè)試和節(jié)省時(shí)間,我們通常需要去重寫(xiě)函數(shù)調(diào)用的外部函數(shù),這時(shí)可以選擇使用rewire模塊實(shí)現(xiàn)。

另外,rewire模塊還提供了__with__接口,可以用于一次性重寫(xiě)私有變量/函數(shù)。不過(guò)這個(gè)功能通常可以使用mocha的before/after以及beforeEach/afterEach來(lái)實(shí)現(xiàn),更為直觀,因此本文不再介紹。

參考

Fundebug: 玩轉(zhuǎn)Node.js單元測(cè)試

Fundebug: 重新思考單元測(cè)試

版權(quán)聲明:
轉(zhuǎn)載時(shí)請(qǐng)注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/12/27/npm-rewire-tutorial/

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

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

相關(guān)文章

  • NPM測(cè)試模塊rewire教程

    摘要:在玩轉(zhuǎn)單元測(cè)試,我介紹了個(gè)用于編寫(xiě)測(cè)試代碼的模塊以及。為了慫恿大家寫(xiě)單元測(cè)試,我再介紹一款神奇的測(cè)試模塊。顧名思義,這兩個(gè)函數(shù)可以分別用于獲取和修改模塊中的變量函數(shù)。另外,模塊還提供了接口,可以用于一次性重寫(xiě)私有變量函數(shù)。 摘要:有了rewire模塊,再也不用擔(dān)心測(cè)試私有函數(shù)了。 在玩轉(zhuǎn)Node.js單元測(cè)試,我介紹了3個(gè)用于編寫(xiě)測(cè)試代碼的NPM模塊:Mocha, Should以及Su...

    dockerclub 評(píng)論0 收藏0
  • 通過(guò)create-react-app從零搭建react環(huán)境

    摘要:通過(guò)文件可以對(duì)圖標(biāo)名稱(chēng)等信息進(jìn)行配置。注意,注冊(cè)的只在生產(chǎn)環(huán)境中生效,并且該功能只有在下才能有效果該文件是過(guò)濾文件配置該文件是描述文件定義了項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息比如名稱(chēng)版本許可證等元數(shù)據(jù)。 一、 快速開(kāi)始: 全局安裝腳手架: $ npm install -g create-react-app 通過(guò)腳手架搭建項(xiàng)目: $ create-react-app 開(kāi)始項(xiàng)目: ...

    Cympros 評(píng)論0 收藏0
  • 通過(guò)create-react-app從零搭建react環(huán)境

    摘要:通過(guò)文件可以對(duì)圖標(biāo)名稱(chēng)等信息進(jìn)行配置。注意,注冊(cè)的只在生產(chǎn)環(huán)境中生效,并且該功能只有在下才能有效果該文件是過(guò)濾文件配置該文件是描述文件定義了項(xiàng)目所需要的各種模塊,以及項(xiàng)目的配置信息比如名稱(chēng)版本許可證等元數(shù)據(jù)。 一、 快速開(kāi)始: 全局安裝腳手架: $ npm install -g create-react-app 通過(guò)腳手架搭建項(xiàng)目: $ create-react-app 開(kāi)始項(xiàng)目: ...

    CoyPan 評(píng)論0 收藏0
  • create-react-app+react-app-rewired搭建viewport解決方案

    摘要:一個(gè)中使用的。比如在項(xiàng)目中的引入它們?cè)谥屑尤胍韵麓a修改項(xiàng)目中的后記完結(jié)撒花本文簡(jiǎn)單研究了一下如何搭建解決方案,如有錯(cuò)誤歡迎指出。 create-react-app搭建vw-layout解決方案 前言:我第一次接觸到vw適配移動(dòng)端的方案是在大漠先生的博客里(如何在Vue項(xiàng)目中使用vw實(shí)現(xiàn)移動(dòng)端適配),強(qiáng)烈建議沒(méi)看過(guò)的朋友先去看一下這篇博客。vw解決方案早有耳聞,我也很想上手嘗試一下,所...

    lbool 評(píng)論0 收藏0
  • 從零開(kāi)始學(xué)習(xí) React 高階組件

    01、介紹 React 高階組件也叫做 React HOC(High Order Component), 它是react中的高級(jí)技術(shù), 用來(lái)重用組件邏輯。 但高階組件本身并不是React API。它只是一種模式,這種模式是由react自身的組合性質(zhì)必然產(chǎn)生的。 那么在學(xué)習(xí)高階組件之前有一個(gè)概念我們必須清楚,就是高階函數(shù)。 02、高階函數(shù) 概念:高階函數(shù)是一個(gè)函數(shù),它接收函數(shù)作為參數(shù)或?qū)⒑瘮?shù)作...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<