模拟外部依赖

//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 }; }; 

我想testing上面的函数是否创build了一个用户。

 //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) }); }) 

有没有人知道一个方法来replace一个假的一个couchdb对象,所以我可以testing一个用户是否被创build。 我真的不想在我的unit testing中调用真正的couchdb。

find了几个解决scheme。 第一个是显式地添加依赖到一个模块。

 module.exports = function(dependency){ var dependency = dependency | require('dependency'); }; 

在这里find这个解决scheme: http : //csausdev.wordpress.com/2010/12/17/dependency-injection-in-node-js/

第二个我发现是用自定义的文件加载器加载文件,并以这种方式replace模块。 这里解释: http : //howtonode.org/testing-private-state-and-mocking-deps

试试诺克 。 你可以模拟http(s)请求,但是你必须跟踪你自己添加的用户。

 var scope = nock('http://myapp.iriscouch.com') .get('/') .reply(200, {username: 'pgte', email: 'pedro.teixeira@gmail.com', _id: "4324243fsd"});