问题描述
我使用 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) 已运行。
请帮我解决这个问题。对不起我的英语。
解决方法
尝试根据以下因素来断言您的问题
-
如果您使用远程或本地 mongodb 连接,请确保所有连接都已启动并正在运行。如果它是远程的,则需要一些时间来建立连接。因为对于测试用例,Mocha 默认超时时间仅为 5 秒。它会导致未处理的承诺拒绝错误,然后可能会向您显示此错误。
-
在 API 服务代码中创建简单的
await setTimeout(dummyPostData,5000)
并观察测试用例是否通过。
最后请更新您的问题,您是否收到任何数据库错误连接错误或任何与超时相关的异常。所以它会帮助我们调试问题。