首页 > 解决方案 > 超测:带有“等待”的 api 被阻止

问题描述

我使用 supertest、chai 和 mocha 来运行 api 测试。我有以下代码:

app.get('/post', async (req, res, next) => {
    await postModel.find();
    console.log("co xuong duoi la duoc");
    res.json({loi: "hi"}).status(200)

    // postModel.find(() => res.json({loi: "hi"}).status(200));
    //;
})
describe('GET /post', () => {

    before(() => {
        db.connect()
            // .then(() => done())
            // .catch((err) => done(err));
    })

    it('OK nha', (done) => {
        request(app).get('/post').then((res) => {
            const body = res.body;
            console.log(body);
            expect(body).to.deep.property('loi');
            done();
        })
        .catch(error => done(error));
    })
})

当我运行 npm test 时,代码被阻塞在await postModel.find()行。然后,终端显示:“对于异步测试和钩子,确保调用了“done()”;如果返回一个 Promise,确保它解析。

但如果我评论这一行://await postModel.find()。有效。

行:console.log(body)已运行。

请帮我解决这个问题。对不起我的英语不好。

标签: javascriptnode.jsasync-awaitmocha.jssupertest

解决方案


尝试通过以下因素来断言您的问题

  1. 如果您使用远程或本地 mongodb 连接,请确保所有连接都已启动并正在运行。如果它是远程的,则需要一些时间来建立连接。因为对于测试用例,Mocha 默认超时时间仅为 5 秒。它会导致未处理的承诺拒绝错误,然后可能会向您显示此错误。

  2. 在 API 服务代码中创建简单await setTimeout(dummyPostData, 5000)的并观察测试用例是否通过。

最后请更新您的问题,您是否收到任何数据库错误连接错误或任何与超时相关的异常。所以它将帮助我们调试问题。


推荐阅读