javascript - 模拟外部依赖

标签 javascript node.js express mocha.js

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

相关文章:

javascript - 使用 cURL 和浏览器打开 *.JS 文件的差异

javascript - 如何向特定套接字发送数据?

Node.js/Express.js : Factory design pattern for DB queries

node.js - 向 Revolut API 进行身份验证

java - AngularJS -> Java : POST/PUT request results in 'Preflight request doesn' t pass access control check'

javascript - 宽度在 jquery 中返回 0

javascript - CSS 动画在 Chrome 中不起作用

javascript - 在 javascript 数组中查找元素哪个更快?

node.js - 不同类型帖子/文章的 Mongodb 模式

node.js - ejs中的布局 `yield`方法是什么?