即使我已经关闭服务器,为什么也要在端口4000上运行服务器

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

我正在使用Jest库对我的节点项目进行单元测试,一切工作正常。当我为路由身份验证创建新测试时,它开始显示服务器已经在端口4000上运行,即使我正在使用afterEach()函数来关闭服务,但也不知道为什么仍然让服务器已经在端口4000上运行。

即使我已经删除了用于路由身份验证的新测试,并通过关闭所有终端重新启动了我的项目,但是每当我运行该项目时,它开始显示错误,表明服务器已经在端口4000上运行。

这里是用户测试文件中的代码,正在正确关闭服务器,而在下一个测试文件中,我再次使用相同的功能进行服务器连接和关闭。

const request = require("supertest");
const { Genre } = require("../../models/genre");
const { User } = require("../../models/user");
const mongoose = require("mongoose");

let server;

describe("/api/genres", () => {
  beforeEach(() => {
    server = require("../../index");
  });
  afterEach(async () => {
    server.close();
    await Genre.remove({});
  });

第二测试文件代码

const { User } = require("../../models/user");
const { Genre } = require("../../models/genre");
const request = require("supertest");
describe("auth middleware", () => {
  beforeEach(() => {
    server = require("../../index");
  });
  afterEach(async () => {
    await Genre.remove({});
    server.close();
  });

这里是.......................的输出●身份验证中间件›如果未提供令牌,则应返回401

listen EADDRINUSE: address already in use :::4000

  10 | 
  11 | const port = process.env.PORT || 4000;
> 12 | const server = app.listen(port, () =>
     |                    ^
  at Function.listen (node_modules/express/lib/application.js:618:24)
  at Object.<anonymous> (index.js:12:20)
  at Object.<anonymous> (tests/integration/auth.test.js:6:14)

测试套件:1个失败,3个通过,总共4个测试:1个失败,26个通过,总共27个快照:共0个时间:13.606秒运行所有测试套件。

node.js express jestjs supertest
1个回答
0
投票

您的测试正在多次创建服务器(index.js)。这使得服务器在许多情况下尝试侦听同一端口。 Jest文档阅读,>

[如果您需要做一些工作,则需要重复进行许多测试,可以使用beforeEach和afterEach。

很明显,您应该一次创建服务器,执行所有测试,然后关闭一次。的方法是beforeAllafterAll

[在某些情况下,您只需要在文件。当设置为异步的,所以您不能内联。笑话提供beforeAll和毕竟要处理这种情况。

因此,您的测试应如下所示,

describe("auth middleware", () => {
  beforeAll(() => {
    server = require("../../index");
  });
  afterAll(async () => {
    await Genre.remove({});
    server.close();
  });
© www.soinside.com 2019 - 2024. All rights reserved.