我有一个名为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单元测试中,将一个函数的行为替换为另一个函数的最佳方法是什么?
答案 0 :(得分:1)
如果您正在运行单元测试,那么您应该模拟函数中使用的所有外部依赖项(函数,对象),并检查它们是否被调用或获得所需的值。
要在ConnectToMongo函数中进行集成测试,您应该从依赖于环境的配置获取到db的连接字符串。 因此,当您进行测试时,您需要设置环境以进行测试'并获得一个配置对象,在开发过程中,您可能有另一个配置对象(不同的设置)和实时环境中的3d配置。 有关制作环境相关配置的更多信息,请查看此内容: Node.js setting up environment specific configs to be used with everyauth