当前位置: 首页 > 知识库问答 >
问题:

node.js集成测试错误:侦听eAddRinuse:address已经在使用:::3000

方永贞
2023-03-14

我使用jest和supertest进行集成测试。在后面的每一节中我关闭了服务器:

let server;
describe('/api/user', () => {
   beforeEach(() => {
      server = require('../../../app');
   });

   afterEach(async () => {
      await server.close();
   });
//some tests
});

但通过运行NPM测试,我得到以下错误:listen eaddrinuse:address已经在使用:::3200

当我只使用一个something.test.js文件时,一切正常。问题是当我添加一个新的something.test.js时。怎么了?

下面是package.json:

{
  "name": "users",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "jest --watchAll"
  },
  "author": "Saeed Heidarbozorg",
  "license": "ISC",
  "dependencies": {
    "config": "^3.3.4",
    "express": "^4.17.1",
    "express-async-errors": "^3.1.1",
    "joi": "^17.4.0",
    "morgan": "^1.10.0",
    "pg": "^8.5.1",
    "winston": "^3.3.3"
  },
  "devDependencies": {
    "jest": "^26.6.3",
    "supertest": "^6.1.3"
  }
}

共有1个答案

沈博延
2023-03-14

在测试环境中,您根本不想创建http服务器,只需要测试您的express app实例。

如果您想从app.js发布代码,我可能会给您一个更快的解决方法。

一般而言,这是我构造它的方式,以便于完成TL;DR:

app.js包含所有express-y内容:

import express from 'express';
const app = express();

// ... do all your express-y stuff

export default app;

index.js是启动服务器的应用程序的入口点。测试期间不需要此文件:

import http from 'http';
import app from './app';

http.createServer(app).listen(...);

测试时,您根本不需要index.js,只需从app.js导入您的express app并对其进行测试即可:

一些测试文件:

import app from './app';
import request from 'supertest';

describe('...',() => {

   test('...', async () => {
     expect((await request(app).get('/some/route')).status).toBe(200);
   });

});
 类似资料:
  • 方法正在传递,这太好了,但是为什么的结果会出现在库测试结果中,我不明白。我怎么才能避免呢? 我在这里列出了和的完整代码。

  • 问题内容: 我正在测试一个应用程序(希望可以在heroku上运行,但是在本地也有问题)。它在运行http.Server.listen()时给我一个EACCES错误- 但它仅在某些端口上发生。 因此,我正在本地运行: 我在900端口(或我尝试过的其他20个端口中的任何一个)上没有任何运行,因此这应该可以工作。奇怪的是它 确实 在某些端口 上 工作。例如,端口3000可以正常工作。 是什么原因造成的?

  • 问题内容: 应用程序可以在localhost上正常运行,但是当它连接到服务器时会出错。 我通过端口22连接服务器 这是错误 任何帮助! -更新- 我跑 结果: 但是我跑 什么也没显示。 任何帮助。这是服务器故障吗? 跑步 跑步 问题答案: 您正在使用一个已使用的端口。您必须更改端口,或者必须终止正在监听端口的进程。打开终端并输入(示例):或或和的过程。 如何更改total.js中的侦听 端口 ?

  • 问题内容: 我无法解决一项服务,而另一项正在解决?如果那是错误的意思,那么等待解决问题的方法是什么? java.lang.IllegalArgumentException:侦听器已在android.net.nsd.NsdManager.resolveService(NsdManager.java:613)处使用,位于com.example.miguel.broadcast.LocalService

  • 我创建了一个nodejs服务器(一个loginapp),但当我尝试创建node应用程序时,出现了一个错误(她以前不在这里): 我认为这与mongo有关,但我没有看到错误, 这是我的app.js代码(不完整)问我,如果你需要更多的我的代码 这是我users.js档案 还有用户。js文件 非常感谢能帮助我的人!

  • 问题内容: 我有一个反向代理背后的应用程序,我希望它仅侦听localhost / 127.0.0.1.。 我希望这可以工作: 要么 …但是我得到一个错误: 在不指定主机名的情况下运行应用程序可以正常工作,即。 我正在运行Node v0.6.14 和express @ 2.5.5 ,并阅读了此Google 网上论坛的 讨论, 并在Express application.js中找到此注释,并说:“此方