超级测试:带有“await”的 api 被阻止

问题描述

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

  • app.js
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));
    //;
})
  • test.js
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) 已运行。

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

解决方法

尝试根据以下因素来断言您的问题

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...