运行 开玩笑时尝试多个服务器实例
Multiple server instance attempts while running jest
好的,所以我一直在使用 jest 和 supertest 为我的 node.js 应用程序编写测试,对于第一个之后的每个测试套件,我都收到错误 Error: listen EADDRINUSE: address already in use :::3000
,我相信这个是因为它试图在每个测试文件上启动服务器(我在 /tests
中有多个测试文件 *.test.js
)
每个测试文件中描述测试之前的顶部看起来像这样
const request = require("supertest");
const app = require("../index.js"); // the express server
jest.setTimeout(30000);
let token;
beforeAll(done => {
request(app)
.post("/api/users/login")
.send({
email: "email here",
password: "password here"
})
.end((err, response) => {
token = response.body.data; // save the token!
done();
});
});
afterAll(done => {
//logout() //Not implemented yet
done();
});
/* Test starts here */
所以,我需要知道如何防止 jest 尝试初始化我的服务器的多个实例?是否可以说将所有这些代码 运行 都放在预测试文件中?有没有什么我可以添加到我的 afterAll
以使其停止服务器,所以当另一个测试开始时我很好?非常感谢。
问题就在这里
const app = require("../index.js"); // the express server
每次您尝试要求 index.js
时,您都从技术上将 index.js
中的所有代码复制并粘贴到您的测试脚本中。
由于您同时 运行 多个测试文件,每个测试都会尝试 运行 index.js
中的相同代码
您可以阅读更多相关内容 http://fredkschott.com/post/2014/06/require-and-the-module-system/
好吧,虽然在每次启动时删除连接并根据@Omar Sherif 的回答同时使用是一个有效的解决方法,但我发现它不必要地复杂,根据开玩笑的文档设置 globalSetup 也是一个相当不必要的麻烦。
我找到的一个简单的解决方案如下;由于 运行 开玩笑将 NODE_ENV
设置为测试,在我的 index.js 文件夹中,我添加了一个非常简单的 if 条件,而不是让我的服务器监听一个不必要的网络端口。 =12=]
if (process.env.NODE_ENV !== "test") {
app.listen(port, () => console.log(`Server Running on ${port}`));
}
这似乎可以解决问题。谢谢!
好的,所以我一直在使用 jest 和 supertest 为我的 node.js 应用程序编写测试,对于第一个之后的每个测试套件,我都收到错误 Error: listen EADDRINUSE: address already in use :::3000
,我相信这个是因为它试图在每个测试文件上启动服务器(我在 /tests
中有多个测试文件 *.test.js
)
每个测试文件中描述测试之前的顶部看起来像这样
const request = require("supertest");
const app = require("../index.js"); // the express server
jest.setTimeout(30000);
let token;
beforeAll(done => {
request(app)
.post("/api/users/login")
.send({
email: "email here",
password: "password here"
})
.end((err, response) => {
token = response.body.data; // save the token!
done();
});
});
afterAll(done => {
//logout() //Not implemented yet
done();
});
/* Test starts here */
所以,我需要知道如何防止 jest 尝试初始化我的服务器的多个实例?是否可以说将所有这些代码 运行 都放在预测试文件中?有没有什么我可以添加到我的 afterAll
以使其停止服务器,所以当另一个测试开始时我很好?非常感谢。
问题就在这里
const app = require("../index.js"); // the express server
每次您尝试要求 index.js
时,您都从技术上将 index.js
中的所有代码复制并粘贴到您的测试脚本中。
由于您同时 运行 多个测试文件,每个测试都会尝试 运行 index.js
您可以阅读更多相关内容 http://fredkschott.com/post/2014/06/require-and-the-module-system/
好吧,虽然在每次启动时删除连接并根据@Omar Sherif 的回答同时使用是一个有效的解决方法,但我发现它不必要地复杂,根据开玩笑的文档设置 globalSetup 也是一个相当不必要的麻烦。
我找到的一个简单的解决方案如下;由于 运行 开玩笑将 NODE_ENV
设置为测试,在我的 index.js 文件夹中,我添加了一个非常简单的 if 条件,而不是让我的服务器监听一个不必要的网络端口。 =12=]
if (process.env.NODE_ENV !== "test") {
app.listen(port, () => console.log(`Server Running on ${port}`));
}
这似乎可以解决问题。谢谢!