我正在使用express在node.js中编写应用程序 我从快递中分离了路线定义,所以我可以在不嘲笑快车的情况下对其进行单元测试 我做的是:
file: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;
file: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);
现在,我想编写一个单元测试,用于检查是否使用正确的参数调用req.send。
由于req.send是异步调用的,因此我无法找出正确的方法。
单元测试此功能的正确方法是什么?
答案 0 :(得分:2)
如果你正在使用mocha,它提供了你可以注入你的回调的“完成”功能,它会告诉mocha测试是异步的,应该等到调用该函数
it('should do something',function(done){
reuest.send(function(){
expect(true).toEqual(true);
done()
})
})
或类似的东西,我不记得这是100%正确的语法,但非常接近 这对于回调是有好处的,但如果你使用promises,另一方面你应该检查chai和mocha的promises断言,非常酷
答案 1 :(得分:0)
我正在寻找你的问题的答案,想知道你是否曾设法解决它。 我的工作是让路线(中间件)返回“承诺”#39;在功能中。 然后在我的单元测试中你可以做
return middleware(req, res).then(function () {
expect(res.render).to.have.been.calledWith('whatever');
});