【问题标题】:Two files using supertest with mocha causing EADDRINUSE两个文件使用 supertest 和 mocha 导致 EADDRINUSE
【发布时间】:2013-09-19 00:58:38
【问题描述】:

我正在使用 supertest 对我的服务器配置和路由处理程序进行单元测试。服务器配置测试在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 错误?

【问题讨论】:

  • 检查两个文件是否不在同一个端口上侦听,或者您错误地将 app.listen 包含在两个文件中

标签: javascript node.js unit-testing mocha.js supertest


【解决方案1】:

回答我自己的问题:

我的超测初始化如下:

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

test.server.js 中,我将这些require 语句直接放在describe 中。在 test.routes.handlers.js 中,语句位于 beforedescribe 内。

阅读dankohn's answer 后,我受到启发,将语句移到任何describebefore 之外的最顶部,现在测试都运行没有问题。

【讨论】:

    【解决方案2】:

    mocha 有一个root Suite:

    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 函数。

    尝试在每个文件的功能之前从根级别要求 supertest。

    【讨论】:

    • 在需要app.js之后,不需要把返回的对象传给supertest吗?我的理解是 supertest 需要将您的服务器作为其第一个参数,即var request = require('supertest'); var app = require('../../app.js'); request = request(app);,然后您才能执行request.get('/') 或其他任何操作。那么你如何将app 传递给其他文件中的超测呢?我想我会尝试制作一个唯一的全局变量并传递它......
    • 对我有用的是将用于 supertest 和 app 的 require 语句移到最顶部,在两个文件中的 beforedescribe 之外。
    猜你喜欢
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 2023-04-09
    相关资源
    最近更新 更多