【问题标题】:EADDRINUSE when watching tests with mocha and supertest使用 mocha 和 supertest 观看测试时使用 EADDRINUSE
【发布时间】:2018-12-18 15:27:23
【问题描述】:

我正在尝试进行 BDD 测试来覆盖我的代码,但我收到了这个错误: 我正在尝试进行 BDD 测试以覆盖我的代码,但出现此错误: 我正在尝试进行 BDD 测试以覆盖我的代码,但出现此错误: 我正在尝试进行 BDD 测试以覆盖我的代码,但出现此错误: 我正在尝试进行 BDD 测试以覆盖我的代码,但出现此错误: app.js

"use strict";

var app = require("express")();

var pg = require("pg");
var http = require("http");
var https = require("https");


require("./config/config");
var server;
swaggerTools.initializeMiddleware(swaggerConfig, function (middleware) {
  // Interpret Swagger resources and attach metadata to request - must be first in swagger-tools middleware chain
  app.use(middleware.swaggerMetadata());
  var sayHello = ( type ) => {
    return ( ) => {
      console.log( `${global.gConfig.app.name} (${global.gConfig.app.desc}) listening for ${type.toUpperCase()} connections on port ${global.gConfig.ports[type]}`);
    }
  }
  if( global.gConfig.ports.http ) {
     http.createServer(app).listen( global.gConfig.ports.http, sayHello('http') );
     server=app.listen(global.gConfig.ports.http);
  }
  if( global.gConfig.ports.https ) {
     server=app.listen(global.gConfig.ports.https);
  }
});
module.exports = {
  serve:server,
  app:app
};

test.js

let chai = require('chai');
let expect = require('chai').expect; 
let chaiHttp = require('chai-http');
var app=require('../').app;
var server=require('../').server;
let should = require('chai').should; 
var request = require("supertest").agent(server);
chai.use(chaiHttp);

describe('Caracteristiques', () => {
    after(function (done) {
        server.close();
        done();
    });
    it('returns an array of Carateristiques', (done) => {
        //chai.request(server)
        request
            .get('caracteristiques')
            .set('Authorization', 'Bearer token')
            .end((err, res) => {
                 console.log("res :",res);
                 expect(res.status).to.equal(200); 
              done();
            });
      });
})

错误:

1) Uncaught error outside test suite:
 Uncaught Error: listen EADDRINUSE :::3001
  at Object._errnoException (util.js:992:11)
  at _exceptionWithHostPort (util.js:1014:20)
  at Server.setupListenHandle [as _listen2] (net.js:1355:14)
  at listenInCluster (net.js:1396:12)
  at Server.listen (net.js:1480:7)
  at Function.listen (node_modules\express\lib\application.js:618:24)
  at C:\Users\zya\Documents\Tdbc-api\tdbc-api\app.js:75:17
  at C:\Users\zya\Documents\Tdbc-api\tdbc-api\node_modules\swagger-tools\index.js:85:7
  at cbWrapper (node_modules\swagger-tools\lib\specs.js:1023:5)
  at validateSwagger2_0 (node_modules\swagger-tools\lib\specs.js:1018:3)
  at validateSemantically (node_modules\swagger-tools\lib\specs.js:1028:5)
  at C:\Users\zya\Documents\Tdbc-api\tdbc-api\node_modules\swagger-tools\lib\specs.js:1221:7
  at C:\Users\zya\Documents\Tdbc-api\tdbc-api\node_modules\swagger-tools\lib\specs.js:1061:29
  at C:\Users\zya\Documents\Tdbc-api\tdbc-api\node_modules\swagger-tools\lib\specs.js:707:12
  at C:\Users\zya\Documents\Tdbc-api\tdbc-api\node_modules\swagger-tools\lib\specs.js:683:9
  at <anonymous>
  at process._tickCallback (internal/process/next_tick.js:188:7)
  at startup (bootstrap_node.js:191:16)
  at bootstrap_node.js:612:3

2) Caracteristiques
   returns an array of Carateristiques:
 TypeError: Cannot read property 'address' of undefined
  at Test.serverAddress (node_modules\supertest\lib\test.js:55:18)
  at new Test (node_modules\supertest\lib\test.js:36:12)
  at TestAgent.(anonymous function) [as get] (node_modules\supertest\lib\agent.js:52:15)
  at Context.it (test\caracteristiques.js:31:14)

3) Caracteristiques
   "after all" hook:
 TypeError: Cannot read property 'close' of undefined
  at Context.<anonymous> (test\caracteristiques.js:23:16)

我觉得设置id不错,有大神帮忙吗?

【问题讨论】:

  • 3001端口只能使用一次。您需要更新配置以使用不同的端口。
  • 有两个端口,3001和3000用于开发环境我使用3001
  • 嗯,有些东西正在使用端口 3001。
  • 这是问题所在,因为服务器和测试使用的是同一个端口
  • 试试这个answer 停止摩卡咖啡。

标签: node.js mocha.js tdd bdd chai


【解决方案1】:

我认为它不起作用,因为您每次执行测试时都试图在同一端口启用服务器。 [或者您在执行测试时让服务器运行]。

在执行测试时尝试关闭服务器。

仅供参考:您将服务器主模块导出为“serve”,然后尝试使用 require(path).server 而不是 require(path).serve 来访问它;

【讨论】:

    猜你喜欢
    • 2013-09-19
    • 2016-06-05
    • 2020-07-03
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多