Supertest在Node的Jest测试中出现MaxListenersExceedingWarning错误。

问题描述 投票:0回答:1

我正在使用Jest和Supertest对我的Node Express应用设置一些测试。

我也在使用Sentry来报告我的错误。在我的app.js文件中,我有以下几行代码来设置Sentry。

app. js

Sentry.init({ environment: "development", dsn: "..." });
app.use(Sentry.Handlers.requestHandler());
...
app.use(Sentry.Handlers.errorHandler());

我有一个简单的测试,它直接指向主页,并期望得到一个200状态码。

主页.测试.js

const app = require("../src/app");
const request = require("supertest")(app);

describe("homepage", () => {
    it("welcomes the user", async () => {
        await request.get("/").expect(200);
    });
});

然后我运行我的 npm run test 脚本在我的控制台中。测试顺利通过;但是,当测试运行多次(超过10次)时,我收到一条错误信息。测试将通过,但我收到以下消息。

(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 response listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 response listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 response listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 response listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 error listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit
(node:84470) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 response listeners added to [ClientRequest]. Use emitter.setMaxListeners() to increase limit

我知道Supertest有问题,因为如果我的测试只包含一个简单的测试,比如说 expect(2+2).toBe(4); 没有问题。只有当我 "请求 "一个路由时(await request.get("/").expect(200);).

因为我是在请求应用程序,所以接下来的问题是,多个错误和响应监听器被添加与 app.use(Sentry.Handles.requestHandler());app.use(Sentry.Handlers.errorHandler());. 如果我删除我的Sentry初始化代码,一切都能正常工作。

我不能删除这几行,因为Sentry无法工作,但我不知道该怎么办。我找了又找,但找不到其他有类似问题的人。说实话,我也不知道该怎么搜。几天了,我也是一筹莫展。

谢谢大家的帮助。

node.js testing jest sentry supertest
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.