摘要:在玩轉單元測試,我介紹了個用于編寫測試代碼的模塊以及。為了慫恿大家寫單元測試,我再介紹一款神奇的測試模塊。顧名思義,這兩個函數可以分別用于獲取和修改模塊中的變量函數。另外,模塊還提供了接口,可以用于一次性重寫私有變量函數。
摘要:有了rewire模塊,再也不用擔心測試私有函數了。
在玩轉Node.js單元測試,我介紹了3個用于編寫測試代碼的NPM模塊:Mocha, Should以及SuperTest。為了慫恿大家寫單元測試,我再介紹一款神奇的NPM測試模塊:rewire。
GitHub倉庫: Fundebug/rewire-tutorial
對于技術,知其然,也應該知其所以然。
對于rewire,它的基本功能與require相同,都是用于導入模塊,只是,它會為導入的模塊添加兩個特殊的函數:__get__與__set__。顧名思義,這兩個函數可以分別用于獲取和修改模塊中的變量/函數。測試的時候,當我們需要獲取或者重寫私有變量/函數,rewire非常有用。
下面是需要測試的代碼示例1:
// 公有函數add function add(a, b) { return a + b; } // 私有函數sub function sub(a, b) { return a - b; } exports.add = add;
可知,add為公有函數,而sub為私有函數。
測試公有函數add時,非常方便,require之后可以直接獲取:
// 測試公有函數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); });
但是,測試私有函數sub時,使用require是無法獲取的。這時,可以使用rewire導入模塊,然后使用其提供的__get__方法獲取私有函數:
// 測試私有函數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); });
在編寫模塊的時候,難免存在一些私有變量或者函數,有了rewire,我們就可以方便地獲取,然后進行測試。
Fundebug是全棧JavaScript錯誤監控平臺,支持各種前端和后端框架,可以幫助您第一時間發現BUG!
下面是需要測試代碼示例2:
var fs = require("fs") function add(a, b) { let result = a + b; fs.writeFileSync("result.txt", result); return result; } exports.add = add;
可知,如果直接測試的話,add函數的計算結果會寫入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); });
但是,當我們測試時,并不希望去寫磁盤,因為當內容很多時,這樣比較浪費時間。這時,我們可以使用rewire導入模塊,然后使用其提供的__set__來重寫fs模塊,避免真的去寫磁盤:
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); });
在實踐中,為了簡化測試和節省時間,我們通常需要去重寫函數調用的外部函數,這時可以選擇使用rewire模塊實現。
另外,rewire模塊還提供了__with__接口,可以用于一次性重寫私有變量/函數。不過這個功能通常可以使用mocha的before/after以及beforeEach/afterEach來實現,更為直觀,因此本文不再介紹。
Fundebug: 玩轉Node.js單元測試
Fundebug: 重新思考單元測試
版權聲明:
轉載時請注明作者Fundebug以及本文地址:
https://blog.fundebug.com/2017/12/27/npm-rewire-tutorial/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/8781.html
摘要:在玩轉單元測試,我介紹了個用于編寫測試代碼的模塊以及。為了慫恿大家寫單元測試,我再介紹一款神奇的測試模塊。顧名思義,這兩個函數可以分別用于獲取和修改模塊中的變量函數。另外,模塊還提供了接口,可以用于一次性重寫私有變量函數。 摘要:有了rewire模塊,再也不用擔心測試私有函數了。 在玩轉Node.js單元測試,我介紹了3個用于編寫測試代碼的NPM模塊:Mocha, Should以及Su...
摘要:通過文件可以對圖標名稱等信息進行配置。注意,注冊的只在生產環境中生效,并且該功能只有在下才能有效果該文件是過濾文件配置該文件是描述文件定義了項目所需要的各種模塊,以及項目的配置信息比如名稱版本許可證等元數據。 一、 快速開始: 全局安裝腳手架: $ npm install -g create-react-app 通過腳手架搭建項目: $ create-react-app 開始項目: ...
摘要:通過文件可以對圖標名稱等信息進行配置。注意,注冊的只在生產環境中生效,并且該功能只有在下才能有效果該文件是過濾文件配置該文件是描述文件定義了項目所需要的各種模塊,以及項目的配置信息比如名稱版本許可證等元數據。 一、 快速開始: 全局安裝腳手架: $ npm install -g create-react-app 通過腳手架搭建項目: $ create-react-app 開始項目: ...
摘要:一個中使用的。比如在項目中的引入它們在中加入以下代碼修改項目中的后記完結撒花本文簡單研究了一下如何搭建解決方案,如有錯誤歡迎指出。 create-react-app搭建vw-layout解決方案 前言:我第一次接觸到vw適配移動端的方案是在大漠先生的博客里(如何在Vue項目中使用vw實現移動端適配),強烈建議沒看過的朋友先去看一下這篇博客。vw解決方案早有耳聞,我也很想上手嘗試一下,所...
01、介紹 React 高階組件也叫做 React HOC(High Order Component), 它是react中的高級技術, 用來重用組件邏輯。 但高階組件本身并不是React API。它只是一種模式,這種模式是由react自身的組合性質必然產生的。 那么在學習高階組件之前有一個概念我們必須清楚,就是高階函數。 02、高階函數 概念:高階函數是一個函數,它接收函數作為參數或將函數作...
閱讀 1163·2021-11-15 18:14
閱讀 3627·2021-11-15 11:37
閱讀 754·2021-09-24 09:47
閱讀 2427·2021-09-04 16:48
閱讀 2182·2019-08-30 15:53
閱讀 2379·2019-08-30 15:53
閱讀 390·2019-08-30 11:20
閱讀 1232·2019-08-29 16:08