用另一个函数替换函数进行测试

时间:2014-08-23 16:25:16

标签: node.js testing mocha

我有一个名为connectToMongo的函数,它连接到本地运行的mongodb数据库myapp。我有另一个调用connectToMongo的函数。我想用mocha测试这个其他功能。但是,我想这样做,以便在测试时,对connectToMongo的任何调用都会自动连接到我的myapp_test数据库而不是我的正常数据库。

理想情况下(我认为)我想做这样的事情(connectToMongoTestingDatabase连接到myapp_test):

var connectToMongo = require('./connectToMongo'),
    connectToMongoTestingDatabase = require('./connectToMongoTestingDatabase')
    registerUser = require('./registerUser');

testingLibrary.configureAlternateBehavior(connectToMongo, connectToMongoTestingDatabase);

it('should register a user', function (done) {

    registerUser({name: 'bob', password: 'password1'}, function (error, response) {
        connectToMongoTestingDatabase(function (error, database) {
            database.collection('users').findOne({name: 'bob'}, function (error, user) {
                expect(user).not.to.be.null;
                done();
            });
        });
    });

});

我一直试图理解Sinon.JS库。我不知道间谍,存根或嘲笑是否能满足这种需要,也不能说明testingLibrary.configureAlternateBehavior的等价物。

我想我也可以创建一个名为global.MYAPP_TESTING的全局变量,在开始测试之前将其设置为true,在connectToMongo的实现中我可以连接到{{如果myapp_test为真,则数据库为1}}。这看起来很糟糕。

在JavaScript单元测试中,将一个函数的行为替换为另一个函数的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

如果您正在运行单元测试,那么您应该模拟函数中使用的所有外部依赖项(函数,对象),并检查它们是否被调用或获得所需的值。

要在ConnectToMongo函数中进行集成测试,您应该从依赖于环境的配置获取到db的连接字符串。 因此,当您进行测试时,您需要设置环境以进行测试'并获得一个配置对象,在开发过程中,您可能有另一个配置对象(不同的设置)和实时环境中的3d配置。 有关制作环境相关配置的更多信息,请查看此内容: Node.js setting up environment specific configs to be used with everyauth