执行查找查询时如何使猫鼬失败
Posted
技术标签:
【中文标题】执行查找查询时如何使猫鼬失败【英文标题】:how can make mongoose fail when executing find query 【发布时间】:2018-10-14 23:22:00 【问题描述】:大家好,我正在为我的服务器编写 mocha 单元测试。我怎样才能得到猫鼬查找查询的错误。我已经尝试在执行之前关闭连接,但没有任何触发。
User.find(, (err, result) =>
if (err)
// I want to get here
return done(result);
);
【问题讨论】:
【参考方案1】:我像下面这样解决了它。这是解决方案。
User = sinon.stub(User.prototype, 'find');
User.yields(new Error('An error occured'), undefined);
通过此代码,它将返回错误。 @ormaz @grégory-neut 感谢您的帮助。
【讨论】:
【参考方案2】:以下不适用于猫鼬,至少现在 (5.0.17) :
除了在find
请求上设置适当的超时之外,关闭与猫鼬的连接是一种测试方法。
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 请求包装到我自己的类中。因此,如果数据库断开连接,我可以自己检查并抛出错误。
【讨论】:
它不工作。您的代码没有错误。 @grégory-neut 你有什么连接参数?尤其是auto_reconnect
、socketTimeoutMS
和connectTimeoutMS
。未经测试,但它应该完全可以工作
没有特殊的参数。用于连接。这是我的连接设置 'mongoose.connect(url);"【参考方案3】:
在我看来,测试错误处理的最佳方法是使用 mock。更多信息在this previous *** topic。
您可以模拟 mongoose 连接和 api 来驱动您的测试(引发错误...)。
图书馆:
sinonjs testdouble【讨论】:
以上是关于执行查找查询时如何使猫鼬失败的主要内容,如果未能解决你的问题,请参考以下文章