//user.js
couchdb = require('couchdb');
exports.create = function(req, res){
user = req.body
if( validate(user) ) {
couchdb('db').insert(user);
//redirect
} else {
//render new again with the user
};
};
我想测试上面的函数是否创建了一个用户。
//user_spec.js
describe('User create', function(){
beforeEach( function(){
//call create with valid user
});
it('should create a user', function(){
//test database for user
assert( fakeDatabase.users.length, 1)
});
})
有没有人知道用假对象替换 couchdb 对象的方法,这样我就可以测试是否创建了用户。我真的不想在我的单元测试中调用真正的 couchdb。
最佳答案
找到了几个解决方案。第一个是显式地向模块添加依赖项。
module.exports = function(dependency){
var dependency = dependency | require('dependency');
};
在这里找到了这个解决方案:http://csausdev.wordpress.com/2010/12/17/dependency-injection-in-node-js/
我发现的第二个是使用自定义文件加载器加载文件并以这种方式替换模块。在这里解释:http://howtonode.org/testing-private-state-and-mocking-deps
关于javascript - 模拟外部依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8928790/