大家好,我正在为我的服务器编写mocha单元测试。如何获取mongoose查找查询的错误。我已经尝试在执行前关闭连接,但没有任何解雇。
User.find({}, (err, result) => {
if (err) {
// I want to get here
}
return done(result);
});
答案 0 :(得分:2)
以下不工作与mongoose,至少现在(5.0.17):
除了在find
请求上设置的正确超时外,关闭与mongoose的连接是一种测试方法。
const request = User.find({});
request.maxTime(1000);
request.exec()
.then(...)
.catch(...);
或
User.find({}, { maxTimeMS: 1000 }, (err, result) => {
if (err) {
// I want to get here
}
return done(result);
});
进一步研究后编辑:
在自己尝试之后,似乎我从来没有从请求中得到错误。
更改请求maxTime
或连接参数auto_reconnect
,socketTimeoutMS
和connectTimeoutMS
似乎没有任何效果。该请求仍然悬而未决。
我发现this堆栈溢出回答说当mongoose与数据库断开连接时所有请求都排队了。所以我们不会从那里得到任何超时。
我可以推荐的解决方案,我在我自己的项目中使用的另一个原因是将mongoose请求包装到我自己的类中。因此,如果数据库断开连接,我可以自行检查并抛出错误。
答案 1 :(得分:1)
在我看来,测试错误处理的最佳方法是使用mock。有关详情,请参见this previous stackoverflow topic。
您可以模拟mongoose连接和api来驱动您的测试(引发错误......)。
图书馆:
答案 2 :(得分:0)
我解决了它,如下所示。这是解决方案。
User = sinon.stub(User.prototype, 'find');
User.yields(new Error('An error occured'), undefined);
通过此代码,它将返回错误。 @ormaz @grégory-neut感谢您的帮助。