亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

淺析Node.js中使用依賴注入的相關(guān)問題及解決方法

 更新時(shí)間:2015年06月24日 09:33:07   投稿:goldensun  
這篇文章主要介紹了淺析Node.js中使用依賴注入的相關(guān)問題及解決方法,Node.js是一個(gè)將JavaScript應(yīng)用運(yùn)行于服務(wù)器端的框架,需要的朋友可以參考下

最近,我轉(zhuǎn)向使用依賴注入來幫助理解分離代碼的簡(jiǎn)單途徑,并有助測(cè)試。然而,Node.js中的模塊依賴Node提供的系統(tǒng)API,這很難判斷私有依賴被恰當(dāng)?shù)氖褂?。一般的依賴注入很難在這種情況下使用,但現(xiàn)在不要放棄希望。

requireCauses 問題

Node.js很容易依照需求導(dǎo)入依賴。它運(yùn)行的很好,并且比AMD模式加載器例如RequireJS要簡(jiǎn)單。當(dāng)我們模擬那些依賴的時(shí)候問題就來了。如果Node.js中模型的加載是受控的,我們?cè)趺醋霾拍芸刂谱寕螌?duì)象在測(cè)試期間被使用到?我們可以使用Node的vm模式,通過vm我們可以再新的上下文中加載模型。運(yùn)行在新的上下文中,我們可以控制需求反射出模型的方法。

解決方案

謝謝這篇文章, 現(xiàn)在可以給你提供一個(gè)相當(dāng)不錯(cuò)的解決方案. 代碼在下面:
 

var vm = require('vm');
var fs = require('fs');
var path = require('path');
 
/**
* Helper for unit testing:
* – load module with mocked dependencies
* – allow accessing private state of the module
*
* @param {string} filePath Absolute path to module (file to load)
* @param {Object=} mocks Hash of mocked dependencies
*/
exports.loadModule = function(filePath, mocks) {
mocks = mocks || {};
 
// this is necessary to allow relative path modules within loaded file
// i.e. requiring ./some inside file /a/b.js needs to be resolved to /a/some
var resolveModule = function(module) {
  if (module.charAt(0) !== '.') return module;
  return path.resolve(path.dirname(filePath), module);
};
 
var exports = {};
var context = {
  require: function(name) {
  return mocks[name] || require(resolveModule(name));
  },
  console: console,
  exports: exports,
  module: {
  exports: exports
  }
};
 
vm.runInNewContext(fs.readFileSync(filePath), context);
return context;
};

你也可以在 這里 下載代碼片段 . 雖然在不是在文章發(fā)布最多的代碼, 他仍然可以使用一些解釋. 當(dāng)我們測(cè)試時(shí), 我們要加載這個(gè)模塊進(jìn)入測(cè)試, 使用theloadModulefunction代替ofrequire加載模塊測(cè)試.
 
第一個(gè)參數(shù)filePath指定了我們要測(cè)試模型的查找位置。第二個(gè)參數(shù)mocks包含一個(gè)對(duì)象,對(duì)象的屬性名稱要和我們嘗試require的模型的名稱相匹配。那些屬性指定的值就是偽對(duì)象,用來代替一般被require的模型。

本質(zhì)上看就是用vm來加載和運(yùn)行模型在另一個(gè)“上下文”中。換句話說,我們重建了全局變量(例如require和exports)以便我們能控制它們。需要注意的是我們編寫了一個(gè)可用的新require函數(shù)。所做一切就是檢查一下用執(zhí)行的名字是否有一個(gè)模擬的依賴,如果每日有,我就就把它委托給那個(gè)常用的require函數(shù)。

使用模塊加載器的例子

如果你還有點(diǎn)困惑,你可以看下面的代碼示例,看它在上下文中的使用,也許能幫你清楚一些。首先,我們創(chuàng)建一個(gè)簡(jiǎn)單的模塊。
 

var fs = require('fs');
 
module.exports = {
// Do something with `fs`
}
想象一下這個(gè)很酷,對(duì)嗎?不管怎樣,現(xiàn)在我們測(cè)試那個(gè)模塊,但是我們要模擬fs來看看它是怎么在內(nèi)部使用的。
 
// Jasmine's syntax http://pivotal.github.com/jasmine/
describe('someModule', function() {
var loadModule = require('module-loader').loadModule;
var module, fsMock;
 
beforeEach(function() {
fsMock = {
 // a mock for `fs`
};
 
// load the module with mock fs instead of real fs
module = loadModule('./web-server.js', {fs: fsMock});
});
 
it('should work', function() {
// a test that utilizes the fact that we can now control `fs`
});
});

主要注意是在7至12行,我們?yōu)閒s創(chuàng)建了一個(gè)偽對(duì)象并使用我們新的loadModule函數(shù)將這個(gè)使用的對(duì)象聯(lián)系到上面的小模塊中(我的意思是真棒!請(qǐng)記住,這是真棒,對(duì)不對(duì)?)。

相關(guān)文章

  • Node.js學(xué)習(xí)之查詢字符串解析querystring詳解

    Node.js學(xué)習(xí)之查詢字符串解析querystring詳解

    這篇文章主要給大家介紹了關(guān)于Node.js查詢字符串解析querystring的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-09-09
  • node實(shí)現(xiàn)的爬蟲功能示例

    node實(shí)現(xiàn)的爬蟲功能示例

    這篇文章主要介紹了node實(shí)現(xiàn)的爬蟲功能,結(jié)合實(shí)例形式分析了nodejs實(shí)現(xiàn)爬蟲功能的步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05
  • nodejs中實(shí)現(xiàn)用戶注冊(cè)路由功能

    nodejs中實(shí)現(xiàn)用戶注冊(cè)路由功能

    這篇文章主要介紹了nodejs中實(shí)現(xiàn)用戶注冊(cè)路由功能的實(shí)例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • NodeJs中的VM模塊詳解

    NodeJs中的VM模塊詳解

    這篇文章主要介紹了NodeJs中的VM模塊詳解,本文講解了什么是VM? 、VM模塊的runInThisContext、runInThisContext方法等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • npm ERR! code ELIFECYCLE錯(cuò)誤及解決方法

    npm ERR! code ELIFECYCLE錯(cuò)誤及解決方法

    有時(shí)候在使用npm運(yùn)行命令時(shí),可能會(huì)遇到錯(cuò)誤,本文主要介紹了npm ERR! code ELIFECYCLE錯(cuò)誤及解決方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • nodejs中的express-jwt的使用解讀

    nodejs中的express-jwt的使用解讀

    這篇文章主要介紹了nodejs中的express-jwt的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Node.js 使用命令行工具檢查更新

    Node.js 使用命令行工具檢查更新

    這篇文章主要介紹了Node.js 使用命令行工具檢查更新的方法,使用Node.js開發(fā)命令行工具是開發(fā)者應(yīng)該掌握的一項(xiàng)技能,適當(dāng)編寫命令行工具以提高開發(fā)效率,有需要的小伙伴可以參考下
    2017-06-06
  • node.js中的fs.realpathSync方法使用說明

    node.js中的fs.realpathSync方法使用說明

    這篇文章主要介紹了node.js中的fs.realpathSync方法使用說明,本文介紹了fs.realpathSync的方法說明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • 詳解使用nvm安裝node.js

    詳解使用nvm安裝node.js

    本篇文章主要介紹了詳解nvm安裝node.js,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Node.js發(fā)起HTTP請(qǐng)求的6種不同方法小結(jié)

    Node.js發(fā)起HTTP請(qǐng)求的6種不同方法小結(jié)

    本文主要介紹了Node.js發(fā)起HTTP請(qǐng)求的6種不同方法小結(jié),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論