Mocha/Sinon 测试猫鼬里面的快递
Posted
技术标签:
【中文标题】Mocha/Sinon 测试猫鼬里面的快递【英文标题】:Mocha/Sinon test mongoose inside express 【发布时间】:2017-02-27 01:49:03 【问题描述】:我尝试用 mocha、supertest 和 sinon 测试这条快速路线。测试无法通过承诺,它在 User.find 回调函数中的第一次猫鼬调用后停止,并带有待处理的错误消息:
错误:超过 2000 毫秒的超时。确保在此测试中调用了 done() 回调。
我在回调中调用了 done() 但什么也没...
module.exports = function(app, User)
app.route('/appointments')
.post(function(req,res)
User.find('department': req.body.department, function(err, workers)
return workers._id;
).then(function(allWorkers)
var deferred = Q.defer();
function sortWorkers(worker)
return Appointments.find(worker: worker._id, start: req.body.date);
;
Q.all(_.map(allWorkers, sortWorkers)).done(function (val)
deferred.resolve(val);
);
return deferred.promise;
).then(function(workers)
console.log(workers);
)
.catch(function(error)
console.log(error);
)
.done();
)
;
这是我的开始测试:
it("should save a user and not save the same", function(done)
var appointments = new Appointments(title: 'okok',worker: '580359c86f7159e767db16a9',start:'2015-04-08T02:50:04.252Z' ,department: 95);
console.log('appointments',appointments);
request(app)
.post("/appointments")
.send(appointments)
.expect(200)
.end(function(err,res)
console.log('ok',res);
done();
);
);
【问题讨论】:
【参考方案1】:首先,您无需通过User.find
promise 致电done
另外,您的 app.route('/appointments').post
永远不会返回任何响应,请尝试添加
res.end();
您的承诺的.then
和.catch
上有console.log
。您也可以使用 HTTP 状态码,例如
...
).then(function(workers)
res.status(200).end();
)
.catch(function(error)
res.status(500).end();
)
这将确保在您的测试中调用 .end(function(err,res) ... )
并调用正确的 done
函数。
【讨论】:
【参考方案2】:您应该始终从单元测试中返回承诺。 您只需在 request(app) 之前添加 return:
return request(app)
.post("/appointments")
. . .
.then(() =>
expect(<your actual value>).to.equal(<expected value>)
)
【讨论】:
是的,我尝试了这个,但它不起作用我认为问题是 Q.all() 在这个级别的测试请求块期间。如何测试这个?【参考方案3】:我找到了解决方案: 在我的一些 .then 函数中,如果工人数组为空,则不返回任何条件,这就是为什么我的测试返回 超过 2000 毫秒的超时。
我补充:
User.find('department': req.body.department, function(err, workers)
if(workers.length == 0)
res.status(500).json( message: "Nobody in this department" );
return workers;
)...
【讨论】:
以上是关于Mocha/Sinon 测试猫鼬里面的快递的主要内容,如果未能解决你的问题,请参考以下文章