當我嘗試遵循TDD的開發方式時,我仍然很難找出如何在JavaScript中模擬某些東西。我習慣用Mockito和Spring嘲笑Java(例如,注入一個mongo mock而不是一個真正的mongo實例),但是我如何在JavaScript中處理這個問題?在node.js應用程序中嘲弄mongoskin
讓我做一個簡單的例子淋巴結的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文件,在那裏我可以測試這兩個「得到」的方法。此外,我想嘲笑mongoskin實例('db'),以便我可以使用例如JSMockito窺探並假裝一些行爲。
現在最好的方法是什麼?有人可以發佈一個小例子文件嗎?我該如何管理注入模擬數據庫實例?
感謝您的幫助!
蒂埃裏