Jest with Typescript error: Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout
Jest with Typescript error: Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout
我正在研究如何使用 Jest 和 Nodejs 创建一些测试,实际上我正在使用打字稿。
当我尝试 运行 一个简单的测试时,通过检查响应的状态,它显示了以下错误:
Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error:
我能做什么?
这是我的以下代码:
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 秒是很多时间。
无论如何你可以像下面那样指定测试超时
describe('Authentication',() => {
it('foobar', async function () { // no arrow function
this.timeout(10000)
await myFunc()
});
});
我不确定你是否真的'completing'请求使用超级测试API。
supertest 的流畅链接方法允许您在实际调度 HTTP 请求之前继续添加 'steps' 到它。不幸的是, send() 正在为您发送时准备发送步骤。正如您从 this superagent example 中看到的那样,它实际上并没有调度,其中许多进一步的配置步骤遵循 send() 并且只有 end() 运行它们。
在几个超级测试示例中,我看到有一个链式 'expect' 调用,它可能还会触发实际的 HTTP post。
同样,https://github.com/visionmedia/supertest#endfn 的 'end()' 文档说...
Perform the request and invoke fn(err, res)
这向我表明,在您发送 'finalising' 调用之前,不会有请求。
在我的 SessionController.ts,我必须输入以下内容:
import {Request, Response} from 'express';
export default class SessionController{
async store(request: Request, response: Response){
return response.status(200).send()
}
}
忘记发了哈哈
我正在研究如何使用 Jest 和 Nodejs 创建一些测试,实际上我正在使用打字稿。 当我尝试 运行 一个简单的测试时,通过检查响应的状态,它显示了以下错误:
Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Timeout - Async callback was not invoked within the 5000 ms timeout specified by jest.setTimeout.Error:
我能做什么?
这是我的以下代码:
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 秒是很多时间。
无论如何你可以像下面那样指定测试超时
describe('Authentication',() => {
it('foobar', async function () { // no arrow function
this.timeout(10000)
await myFunc()
});
});
我不确定你是否真的'completing'请求使用超级测试API。
supertest 的流畅链接方法允许您在实际调度 HTTP 请求之前继续添加 'steps' 到它。不幸的是, send() 正在为您发送时准备发送步骤。正如您从 this superagent example 中看到的那样,它实际上并没有调度,其中许多进一步的配置步骤遵循 send() 并且只有 end() 运行它们。
在几个超级测试示例中,我看到有一个链式 'expect' 调用,它可能还会触发实际的 HTTP post。
同样,https://github.com/visionmedia/supertest#endfn 的 'end()' 文档说...
Perform the request and invoke fn(err, res)
这向我表明,在您发送 'finalising' 调用之前,不会有请求。
在我的 SessionController.ts,我必须输入以下内容:
import {Request, Response} from 'express';
export default class SessionController{
async store(request: Request, response: Response){
return response.status(200).send()
}
}
忘记发了哈哈