unit testingasynchronouscallback的快速路由

我正在使用express在node.js中编写一个应用程序。
我从快递中分离出路线定义,所以我可以在不嘲笑快递的情况下进行unit testing。
我做的是:

文件:usersRoutes.js

var routes = { getAll: function(req,res) { var db = req.db; // req.db is initialized through a dedicated middleware function var usersCollection = db.get('users'); usersCollection.find({},{limit:10},function(e,results){ res.send(results); }); } }; module.exports = routes; 

文件:users.js

 var express = require('express'); var router = express.Router(); var routes = require('./usersRoutes'); /* GET users listing. */ router.get('/', routes.getAll); module.exports = router; 

最后在app.js中

 var users = require('./routes/users/users.js'); app.use('/users', users); 

现在,我想编写一个unit testing,检查req.send是否被正确的参数调用。 我很难找出正确的方法,因为req.send是asynchronous调用的。
什么是unit testing这个function的正确方法?

如果你正在使用摩卡,它提供了你可以注入callback的“完成”函数,它会告诉摩卡,testing是asynchronous的,应该等到该函数被调用

 it('should do something',function(done){ reuest.send(function(){ expect(true).toEqual(true); done() }) }) 

或类似的东西,我不记得这是100%正确的语法,但是非常接近,这是很好的callback,但如果你使用诺言另一方面,你应该检查柴和摩卡的承诺断言,是非常酷

我正在寻找你的问题的答案,想知道你是否设法解决它。 我的工作是让路由(中间件)在函数中返回“承诺”。 然后在我的unit testing中,你可以做

 return middleware(req, res).then(function () { expect(res.render).to.have.been.calledWith('whatever'); }); 
Interesting Posts