嘲笑仓库,然后换掉在Node.js中真正的实现

我正在为上面的抽象构build一个具有更高级别API的Repository层,以调用数据库持久性。 但是由于JavaScript没有像C#或Java这样的语言接口的概念,你如何replace真正实现的模拟?

我更喜欢创build自定义模拟,节点存储库模块与数据persitence高层次的方法在他们与Sinon.js或类似的东西。

如果我正在创build节点模块,那么如何? 我可以发送存储库的模拟表示,在那里我嘲笑存储库方法正在做什么,但是使用这些存储库模块的实际节点模块需要使用调用真实数据库的真实存储库实现。 这是如何在Node中完成的? 我想通过属性注入,我不想要一些巨大的注入IoC框架。

既然没有接口的概念,那么你在Node / JS中使用wtf吗? 我不得不在存储库下面创build一个数据层(不pipe是对Postgres进行实际查询调用的一组自定义模块,还是使用Mongoose或其他任何方法,我需要一个存储库调用的DL模块这是真正的数据库调用引擎盖下)。

而且可以说,我确实select使用像Sinon.js这样的框架,嘲笑框架和真实模块可以共享的模块的通用界面是什么?

有不止一种方法来做到这一点。 如果你来自不同的背景,可能需要一些适应节点。

你可以这样做:

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); 

有很多可能的变化。 你可以做一个dynamic的require某个地方根据string或其他东西。 或者使用类或初始化函数。 大多数人可能最终会变得相似。

proxyrequire模块可能会有所帮助。 那么可以Sinon.js。

由于实际上没有types检查,人们通常在运行时正在validation它们的testing。 如果你真的在做TDD,它可能没有什么大不了的。