如何解决方法读取正文时摩卡超时
序言:我知道 this question,但没有找到有用的答案。那里接受的答案表明使用 async
和 await
应该可以解决这个问题,但事实并非如此。
我已经使用 Mocha 和 Supertest 在 TypeScript 中编写了这个测试:
it('returns 400 when redirectURL is missing',async () => {
const isAuthorized = (_req: Request) => true;
const hooks = { onPostAuth: async (_req: Request) => {} };
const app = createApp(isAuthorized,hooks);
await request(app)
.post('/')
.set('Content-Type','application/json')
.send({ }) // Body is missing redirectURL
.expect(400);
});
当我运行它时,正如预期的那样,测试失败了:
1) POST
returns 400 when redirectURL is missing:
Error: expected 400 "Bad Request",got 200 "OK"
此时,HTTP API 如下所示:
export function createApp(
isAuthorized: (_: Request) => boolean,hooks: { onPostAuth: (_: Request) => any; })
{
const app = express();
const authorize = createAuthorizationHandler(isAuthorized);
app.post("/",authorize,async (req,res) => {
const result = await hooks.onPostAuth(req);
return res.send(result);
})
return app;
}
一切都很好。我现在在代码中添加一个 if
语句以在缺少所需属性时返回 400 Bad Requst
:
app.post("/",res) => {
if (!req.body.redirectURL) {
return res.status(400).send();
}
const result = await hooks.onPostAuth(req);
return res.send(result);
})
3) POST
returns 400 when redirectURL is missing:
Error: Timeout of 2000ms exceeded. For async tests and hooks,ensure "done()" is called; if returning a Promise,ensure it resolves. (C:\Users\mark\Documents\Criipto\fusebit-extensibility\tests\index.test.ts)
at listOnTimeout (internal/timers.js:531:17)
at processtimers (internal/timers.js:475:7)
为什么会这样,我该怎么做才能解决问题?
实际上,仅读取 req.body.redirectURL
就足以触发该行为:
app.post("/",res) => {
if (!req.body.redirectURL) {
}
const result = await hooks.onPostAuth(req);
return res.send(result);
})
尽管它在 if
语句内没有做任何事情,但测试仍然超时并挂起,如上所述。
解决方法
感谢 cdimitroulas 的评论,事实证明我确实没有为正文解析设置 Express。添加这个:
app.use(express.json());
解决了问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。