如何在执行查询时使mongoose失败

时间:2018-05-04 12:54:20

标签: javascript node.js unit-testing mongoose mocha

大家好,我正在为我的服务器编写mocha单元测试。如何获取mongoose查找查询的错误。我已经尝试在执行前关闭连接,但没有任何解雇。

User.find({}, (err, result) => {
    if (err) {
        // I want to get here
    }
    return done(result);
});

3 个答案:

答案 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_reconnectsocketTimeoutMSconnectTimeoutMS似乎没有任何效果。该请求仍然悬而未决。

我发现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感谢您的帮助。