【发布时间】:2014-10-17 07:25:36
【问题描述】:
我有一个名为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 的实现中,如果 global.MYAPP_TESTING 可以连接到 myapp_test 数据库是真的。不过这似乎很糟糕。
在 JavaScript 单元测试中将一个函数的行为替换为另一个函数的最佳方法是什么?
【问题讨论】:
-
这通常是 DI(依赖注入)模式的用途。制作一组一次性功能,您只需
require()代替 mongo 业务。