我使用jest和supertest来引发express的示例并在其上运行测试。
我面临着忙碌的港口问题,仍然无法解决。
在我的测试中,我做了下一个:
import supertest from 'supertest';
const agent = supertest(app);
然后我去请求代理和一切正常。直到我运行另一个测试。在app.js我有:
var app = express();
app.post('/auth/changePassword',VerifyToken, auth.changePassword);
app.listen(4001, function () {
console.log('Server is running');
});
所以第一个规范运行得很好。但是第二个试图监听已经在使用的端口。我真的不知道如何关闭这里的连接。
我尝试了app.close()
,但得到了这样的方法的错误。这很明显,我必须分配
server = app.listen(4001, function () {
console.log('Server is running');
});
server.close();
但是我不知道该怎么做,我也试着在jest.setup中预置代理并将其分配给全局变量
import app from "../../server/app";
import supertest from 'supertest';
const agent = supertest(app);
global.agent = agent;
但情况是一样的,第一次测试通过,第二次尝试在同一个端口上提高express。
2条答案
按热度按时间eufgjt7s1#
Supertest能够为您启动和停止您的应用程序-您永远不需要在测试期间显式杀死express服务器(即使在并行运行时)
问题是,在
app.js
中,服务器实际上是启动的--这意味着当运行应用程序测试时,每次读取app.js
时(或每个测试用例一次),服务器都会启动。您可以通过将
server start
逻辑拆分到一个单独的文件中来解决这个问题,以便导入app.js
不会启动应用程序(而是返回一个Express服务器示例)。polhcujo2#
我的解决方案是在允许express监听连接之前确保
NODE_ENV
没有设置为'test'
。