簡體   English   中英

執行查找查詢時如何使貓鼬失敗

[英]how can make mongoose fail when executing find query

大家好,我正在為服務器編寫Mocha單元測試。 如何獲得貓鼬查找查詢的錯誤。 我嘗試在執行之前關閉連接,但是沒有觸發。

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

下面不要與貓鼬的工作 ,至少現在是(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_reconnectsocketTimeoutMSconnectTimeoutMS似乎沒有任何效果。 該請求仍然掛起。

我發現這個堆棧溢出答案說,當貓鼬從數據庫斷開連接時,所有請求都已排隊。 因此,我們不會從那里超時。

我可以推薦的解決方案,並且出於另一個原因在我自己的項目中使用,這是將貓鼬請求包裝到我自己的類中。 因此,如果數據庫斷開連接,我可以自己檢查並引發錯誤。

我認為,測試錯誤處理的最佳方法是使用模擬。 有關上一個stackoverflow主題的更多信息。

您可以模擬貓鼬連接和api來驅動測試(引發錯誤...)。

圖書館:

我像下面這樣解決了。 這是解決方案。

User = sinon.stub(User.prototype, 'find');
User.yields(new Error('An error occured'), undefined);

通過此代碼,它將返回錯誤。 @ormaz @grégory-neut感謝您的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM