2015-09-06 73 views
2

我正在爲上面的抽象創建一個具有更高級別API的倉庫層,以調用數據庫持久性。但是,由於JavaScript沒有象C#或Java這樣的語言接口的概念,你如何替換真正實現的模擬?嘲笑倉庫,然後在Node.js中實現真正的實現

我更喜歡創建自定義模擬,節點存儲庫模塊與他們的數據persitence高級方法與Sinon.js或類似的東西。

如果我正在創建節點模塊,那該怎麼做?我可以發送存儲庫的模擬表示,在那裏我嘲笑存儲庫方法正在做什麼,但是使用這些存儲庫模塊的實際節點模塊需要使用調用真實數據庫的真實存儲庫實現。這是如何在Node中完成的?我想通過一個屬性注入,我不想要一些巨大的注入IoC框架。

由於沒有接口的概念,所以你在Node/JS中使用wtf嗎?我必須在存儲庫下面創建一個數據層(無論是一組定製的模塊,這些模塊對Postgres進行真正的查詢調用,還是使用Mongoose或其他任何方式,我需要存儲庫要求的一組DL模塊這是真正的數據庫調用引擎蓋下)。

並且可以說我確實選擇使用像Sinon.js這樣的框架,嘲笑框架和真實模塊可以共享的模塊的通用界面是什麼?

回答

0

有多種方法可以做到這一點。如果您來自不同的背景,則可能需要一些適應節點。

你可以這樣做:

module.exports = function(db) { 
    this.db = db; 

    this.myQuery = function(n, cb) { 
    this.db.query(n, cb); 
    } 
} 

然後在config.js

var exports.db = require('./mydb'); 

然後

var config = require('./config.js'); 
var db = require('./db')(config.db); 

有許多可能的變化。你可以在某處根據字符串或其他東西做一個動態的require。或者使用類或init函數。大多數人可能最終會變得相似。

proxyrequire模塊可能會有幫助。 Sinon.js也可以。

由於確實沒有類型檢查,人們通常在運行時驗證它們的測試。如果你真的在做TDD,它可能不會產生巨大的影響。

+0

所以是'這'設置對象的原型屬性? – PositiveGuy