问题描述
我正在研究如何使用带有Jest的Jest创建一些测试,实际上我正在使用打字稿。 当我尝试运行简单测试时,通过检查响应的状态,它显示以下错误:
超时-在jest.setTimeout.Error指定的5000毫秒超时内未调用异步回调。超时-在jest.setTimeout.Error指定的5000毫秒超时内未调用异步回调。
我该怎么办?
这是我的以下代码:
session.test.ts =>
const request = require('supertest');
import app from '../../src/server';
describe('Authentication',() => {
it('should authenticate with valid credentials',async() =>{
const response = await request(app)
.post('/sessions')
.send({
email: "myemail@gmail.com",password: "123456"
})
await expect(response.status).toBe(200);
});
});
SessionController.ts =>
import {Request,Response} from 'express';
export default class SessionController{
async store(request: Request,response: Response){
return response.status(200);
}
}
server.ts =>
import express from 'express';
import routes from './routes';
require("dotenv").config({
path: process.env.NODE_ENV === "test" ? ".env.test" : ".env"
});
const app = express();
app.use(express.json());
app.use(routes);
app.listen(3333);
export default app;
和routes.ts:
import express from 'express';
import UsersController from './controllers/UsersController';
import SessionController from './controllers/SessionController';
const routes = express.Router();
const usersControllers = new UsersController();
const sessionController = new SessionController();
routes.post('/users',usersControllers.create);
routes.post('/sessions',sessionController.store);
export default routes;
解决方法
第一件事是检查请求中是否有错误,或者(很可能)检查请求是否保持挂起状态,因为5秒钟是很长的时间。
无论如何,您都可以指定测试超时,例如Follow
describe('Authentication',() => {
it('foobar',async function () { // no arrow function
this.timeout(10000)
await myFunc()
});
});
,
我不确定您是在使用超级测试API来“完成”请求。
supertest的流畅链接方法使您可以在实际分派HTTP请求之前继续对其添加“步骤”。不幸的是,send()正在为您的调度准备发送步骤。正如您从this superagent example中看到的那样,它实际上并没有进行调度,在该过程中,send()之后有许多其他配置步骤,只有end()可以运行所有这些步骤。
在几个超级测试示例中,我看到了一个链接的“期望”调用,该调用可能还会触发实际的HTTP帖子。
同样,https://github.com/visionmedia/supertest#endfn上的'end()'文档说...
执行请求并调用fn(err,res)
这向我表明,在您发送“最终定稿”电话之前,不会有请求。
,在我的SessionController.ts上,我必须放置以下内容:
import {Request,Response} from 'express';
export default class SessionController{
async store(request: Request,response: Response){
return response.status(200).send()
}
}
我忘了发送哈哈