首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在node.js应用程序中模拟mongoskin

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

Stack Overflow用户
提问于 2012-10-07 20:27:09
回答 1查看 621关注 0票数 0

当我尝试遵循测试驱动开发的开发方式时,我仍然在努力找出如何在JavaScript中模拟某些东西。我习惯于在Java语言中使用Mockito和Spring进行模拟(例如,注入一个mongo模拟而不是真正的mongo实例),但是我如何在JavaScript中实现这一点呢?

让我用node- node.js做一个简单的例子:

代码语言:javascript
复制
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实例?

谢谢你的帮忙!

蒂埃里

EN

回答 1

Stack Overflow用户

发布于 2012-10-08 23:26:44

在一般情况下,可以很容易地模拟rest api:https://github.com/flatiron/nock

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

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

第二种方法是使用一些测试数据启动一个数据库,并在测试期间与其挂钩。这有点‘功能测试’,但在我的经验中也要实用得多。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12768808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档