簡體   English   中英

Node.JS 集成測試錯誤:監聽 EADDRINUSE: address already in use:::3000

[英]Node.JS integration test error: listen EADDRINUSE: address already in use :::3000

我使用jestsupertest進行集成測試。 在 afterEach 部分我關閉了服務器:

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

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

但是通過運行npm test我得到這個錯誤: listen EADDRINUSE: address already in use:::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"
  }
}

tl;博士在測試環境中,您根本不想創建 http 服務器,只需測試您的快速應用程序實例。

如果你想從你的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 應用並測試它:

一些測試文件:

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

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

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

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM