spe*_*990 6 testing node.js sentry supertest jestjs
我正在努力使用 Jest 和 Supertest 以及我的 Node Express 应用程序来设置一些测试。
我还使用 Sentry 来报告我的错误。我的 app.js 文件中有以下几行代码来设置 Sentry:
应用程序.js
Sentry.init({ environment: "development", dsn: "..." });
app.use(Sentry.Handlers.requestHandler());
...
app.use(Sentry.Handlers.errorHandler());
Run Code Online (Sandbox Code Playgroud)
我有一个简单的测试,定向到主页并期望 200 状态代码。
home.test.js
const app = require("../src/app");
const request = require("supertest")(app);
describe("homepage", () => {
it("welcomes the user", async () => {
await request.get("/").expect(200);
});
});
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我知道 Supertest 有问题,因为如果我的测试仅包含一个简单的测试,那么expect(2+2).toBe(4);就没有问题。仅当我“请求”路线时(await request.get("/").expect(200);)。
由于我正在请求该应用程序,下一个问题是使用app.use(Sentry.Handles.requestHandler());和添加多个错误和响应侦听器app.use(Sentry.Handlers.errorHandler());。如果我删除 Sentry 初始化代码,一切都会正常工作。
我无法删除这些行,因为 Sentry 无法工作,但我不知道该怎么做。我看了又看,但找不到其他人有类似的问题。老实说,我不确定要搜索什么。我已经为此工作了好几天了,但我却不知所措。
谢谢您的帮助。
小智 2
我也遇到了这个问题,我找到的解决方案是:
在 package.json 的测试脚本中,我设置 NODE_ENV 环境变量进行测试。
"scripts": {
"test": "NODE_ENV=test jest --detectOpenHandles -i",
"test:watch": "NODE_ENV=test jest --watch --coverage=false --
},
Run Code Online (Sandbox Code Playgroud)
在app.js中,如果我们在测试环境中,我们不会启动Sentry。这将通过条件来完成。
"scripts": {
"test": "NODE_ENV=test jest --detectOpenHandles -i",
"test:watch": "NODE_ENV=test jest --watch --coverage=false --
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1780 次 |
| 最近记录: |