当我尝试遵循测试驱动开发的开发方式时,我仍然在努力找出如何在JavaScript中模拟某些东西。我习惯于在Java语言中使用Mockito和Spring进行模拟(例如,注入一个mongo模拟而不是真正的mongo实例),但是我如何在JavaScript中实现这一点呢?
让我用node- node.js做一个简单的例子:
var mongoskin = require('mongoskin');
var restify = require('restify');
// ###############################
// ## Global Configuration
// ###############################
var mongoURL = process.env.MONGOHQ_URL || "mongodb://localhost/test";
var serverPort = process.env.PORT || 5000;
// ###############################
// ## Basic Setup
// ###############################
var server = restify.createServer({
name: 'test'
});
server.use(connect.logger());
server.use(restify.acceptParser(server.acceptable));
server.use(restify.bodyParser());
var db = mongoskin.db(mongoURL);
// ###############################
// ## API
// ###############################
server.get('/api/v1/projects', function (req, res, next) {
db.collection('projects').find().toArray(function (error, projects) {
if (error) {
return next(new restify.InternalError());
}
res.json(200, projects);
return next();
});
});
server.get('/api/v1/projects/:projectId', function (req, res, next) {
if (req.params.projectId === null) {
return next(new restify.InvalidArgumentError('ProjectId must not be null or empty.'))
}
db.collection('projects').findById(req.params.projectId, function (error, project) {
if (error) {
return next(new restify.InternalError());
}
res.json(200, project);
return next();
});
});
// ###############################
// ## Main Server Initialization
// ###############################
server.listen(serverPort, function () {
console.log('%s listening at %s', server.name, server.url);
});我想现在有一个测试javascript文件,我可以在其中测试这两个'get‘方法。此外,我还想模拟mongoskin实例('db'),这样我就可以使用例如JSMockito来监视和伪装一些行为。
现在解决这个问题的最佳方法是什么?有人可以发布一个小的示例文件吗?我如何注入模拟的db实例?
谢谢你的帮忙!
蒂埃里
发布于 2012-10-08 23:26:44
在一般情况下,可以很容易地模拟rest api:https://github.com/flatiron/nock
模拟数据库的问题是,它通常会得到一个极其复杂和复杂的api。有两种简单的方法(因此在严格的单元测试意义上不太正确)可以做到这一点。
一个是让“模型”包装你的实体访问,而不是直接访问数据库驱动程序。然后,您可以轻松地模拟您的模型apis。这很好,但如果您只是执行一些基本的数据库操作,并且不需要大型模型抽象,则会有点麻烦。
第二种方法是使用一些测试数据启动一个数据库,并在测试期间与其挂钩。这有点‘功能测试’,但在我的经验中也要实用得多。
https://stackoverflow.com/questions/12768808
复制相似问题