2015-09-06 74 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