当我尝试遵循 TDD 开发方式时,我仍然很难找出如何在 JavaScript 中模拟某些东西。我习惯于在 Java 中使用 Mockito 和 Spring 进行模拟(例如,注入一个 mongo 模拟而不是真正的 mongo 实例),但是如何在 JavaScript 中处理这个?
让我用 node-restify 做一个简单的 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 来监视和假装某些行为。
现在最好的方法是什么?有人可以发布一个小示例文件吗?我如何设法注入模拟的数据库实例?
谢谢你的帮助!
蒂埃里