两个文件使用超级测试与摩卡导致 EADDRINUSE

Two files using supertest with mocha causing EADDRINUSE

本文关键字:测试 摩卡 EADDRINUSE 两个 文件      更新时间:2023-09-26

我正在使用超级测试来对我的服务器配置和路由处理程序进行单元测试。服务器配置测试处于test.server.js状态,路由处理测试处于test.routes.handlers.js 中。

当我使用 mocha . 运行所有测试文件时,我得到EADDRINUSE。当我单独运行每个文件时,一切都按预期工作。

这两个文件都定义并需要超级测试request = require('supertest') 和快速服务器文件app = require('../server.js') 。在server.js中,服务器是这样启动的:

http.createServer(app).listen(app.get('port'), config.hostName, function () {
  console.log('Express server listening on port ' + app.get('port'));
});

我的实现有问题吗?如何避免运行测试时出现EADDRINUSE错误?

摩卡有一个根套件:

You may also pick any file and add "root" level hooks, for example add beforeEach() outside of describe()s then the callback will run before any test-case regardless of the file its in. This is because Mocha has a root Suite with no name.

我们使用它来启动一次 Express 服务器(我们使用环境变量,以便它在与我们的开发服务器不同的端口上运行):

before(function () {
  process.env.NODE_ENV = 'test';
  require('../../app.js');
});

(我们在这里不需要done(),因为 require 是同步的。这是,服务器只启动一次,无论有多少不同的测试文件包含此根级before函数。

尝试要求在每个文件中运行之前从根级别进行超级测试。

回答我自己的问题:

我的超级测试初始化如下所示:

var app = require('../server.js');
var request = require('supertest')(app);

test.server.js中,我把这些要求语句直接放在describe里。在test.routes.handlers.js中,语句在describe内的before内。

在阅读了 dankohn 的回答后,我受到启发,简单地将陈述移到任何describebefore之外的最顶部,现在测试都运行起来没有问题。