Javascript 在node.js应用程序中模拟mongoskin

Javascript 在node.js应用程序中模拟mongoskin,javascript,node.js,mocking,tdd,mongoskin,Javascript,Node.js,Mocking,Tdd,Mongoskin,当我尝试遵循TDD开发方式时,我仍然很难找到如何在JavaScript中模拟某些东西。我习惯于用Mockito和Spring在Java中进行模拟(例如,注入一个mongo模拟而不是一个真正的mongo实例),但如何在JavaScript中实现这一点 让我用node restify制作一个简单的示例node.js: var mongoskin=require('mongoskin'); var restify=require('restify'); // #####################

当我尝试遵循TDD开发方式时,我仍然很难找到如何在JavaScript中模拟某些东西。我习惯于用Mockito和Spring在Java中进行模拟(例如,注入一个mongo模拟而不是一个真正的mongo实例),但如何在JavaScript中实现这一点

让我用node restify制作一个简单的示例node.js:

var mongoskin=require('mongoskin');
var restify=require('restify');
// ###############################
//##全局配置
// ###############################
var mongoURL=process.env.MONGOHQ_URL | |”mongodb://localhost/test";
var serverPort=process.env.PORT | 5000;
// ###############################
//##基本设置
// ###############################
var server=restify.createServer({
名称:“测试”
});
使用(connect.logger());
use(restify.acceptParser(server.acceptable));
use(restify.bodyParser());
var db=mongoskin.db(mongoURL);
// ###############################
//##API
// ###############################
get('/api/v1/projects',函数(req、res、next){
db.collection('projects').find().toArray(函数(错误,项目){
如果(错误){
返回next(新的restify.InternalError());
}
res.json(200个项目);
返回next();
});
});
get('/api/v1/projects/:projectId',函数(req、res、next){
if(req.params.projectId==null){
return next(new restify.InvalidArgumentError('ProjectId不能为null或空'))
}
db.collection('projects').findById(req.params.projectId,函数(错误,项目){
如果(错误){
返回next(新的restify.InternalError());
}
res.json(200,项目);
返回next();
});
});
// ###############################
//##主服务器初始化
// ###############################
侦听(服务器端口,函数(){
console.log(“%s”在%s、server.name、server.url上侦听);
});
我现在想要一个测试javascript文件,在这里我可以测试这两个“get”方法。此外,我想模拟mongoskin实例('db'),以便我可以使用例如JSMockito来监视和假装一些行为

现在最好的方法是什么?有人可以发布一个小的示例文件吗?我如何注入模拟数据库实例

谢谢你的帮助


Thierry

一般来说,轻松模仿rest api有很多优先权:

模拟数据库的问题是,它通常有一个极其复杂和毛茸茸的api。有两种简单的方法可以做到这一点(因此在严格的单元测试意义上不太正确)

一种是使用“模型”包装实体访问,而不是直接访问数据库驱动程序。然后,您可以轻松地模拟您的模型API。这很好,但如果您只是在执行一些基本的数据库操作,而不需要大的模型抽象,则有点烦人

第二种方法是使用一些测试数据启动一个数据库,并在测试期间连接到它。这是一种“功能测试”,但根据我的经验,它更实用