带有Typescript错误的Jest:超时-未在jest.setTimeout.Timeout指定的5000毫秒超时内调用异步回调

问题描述

我正在研究如何使用带有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()
    }
    
} 

我忘了发送哈哈

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...