首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Supertest和jest:无法关闭快速连接

Supertest和jest:无法关闭快速连接
EN

Stack Overflow用户
提问于 2021-03-06 16:19:09
回答 1查看 283关注 0票数 0

我正在使用jest和supertest来引发express的实例并在其上运行测试。

我遇到了端口繁忙的问题,但仍然无法解决。

在我的测试中,我做了下一步:

代码语言:javascript
复制
import supertest from 'supertest';
const agent = supertest(app);

然后我用agent请求,一切都很好。直到我运行另一个测试。在app.js中,我有:

代码语言:javascript
复制
var app = express();

app.post('/auth/changePassword',VerifyToken, auth.changePassword);

app.listen(4001, function () {
    console.log('Server is running');
});

所以第一个规范运行的很好。但是second会尝试侦听已经在使用的端口。我真的不知道如何关闭这里的连接。

我尝试过app.close(),但得到的错误是这样的方法。这一点很清楚,我必须指定

代码语言:javascript
复制
server = app.listen(4001, function () {
    console.log('Server is running');
});
server.close();

但是我不知道我该怎么做。我还尝试在jest.setup中预置代理,并将其分配给全局变量

代码语言:javascript
复制
import app from "../../server/app";
import supertest from 'supertest';

const agent = supertest(app);
global.agent = agent;

但情况是一样的,第一个测试通过了,第二个尝试在同一个端口上提升express。

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 16:28:57

Supertest能够为您启动和停止您的应用程序-您永远不需要在测试期间显式地终止express服务器(即使是在并行运行时)。

问题是,在app.js中,您的服务器实际上是启动的-这意味着当应用程序测试运行时,每次读取app.js (或每个测试用例一次)时,您的服务器都会启动。

您可以通过将server start逻辑拆分到一个单独的文件中来解决这个问题,这样导入app.js就不会启动应用程序(而是返回一个express服务器实例)我通常使用的模式是:

代码语言:javascript
复制
// app.js
import express from 'express'
export const app = express();

app.get("/example", (req,res) => {
  return res.status(200).json({data: "running"})
})

// server.js
import app from "./app"

app.listen(3000, () => console.log("listening on 3000"));

// app.spec.js
import app from "./app"
import request from "supertest"

it("should be running", async () => {
  const result = await request(app).get("/example");

  expect(result.body).toEqual({data: "running"});
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66503707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档