javascript - 超测:带有“等待”的 api 被阻止
问题描述
我使用 supertest、chai 和 mocha 来运行 api 测试。我有以下代码:
- 应用程序.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));
//;
})
- 测试.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)
的并观察测试用例是否通过。
最后请更新您的问题,您是否收到任何数据库错误连接错误或任何与超时相关的异常。所以它将帮助我们调试问题。
推荐阅读
- r - 为什么我的时间序列中没有正确的变量?
- c - 用作数组索引时的规范无符号文字后缀
- vba - 循环直到找不到搜索词
- ios - 将日期转换为格林尼治标准时间日期日期月份年份 Swift
- python-3.x - 尝试使用 Google Translate API 时,我不断收到 SSL 错误
- powershell - 为什么带有 -NewerThan 的 Test-Path 不能在这里工作
- excel - VBA:重新聚焦 Excel 工作簿
- cassandra - ScyllaDB - [无效查询] message="尚不支持集合过滤"
- typescript - 在 TypeScript 中,如何使用子模块来扩充类型声明
- polymer - 除了“dom-module”之外,有没有办法控制 CustomElementRegistry 和名称