两个文件使用超级测试与摩卡导致 EADDRINUSE
Two files using supertest with mocha causing EADDRINUSE
我正在使用超级测试来对我的服务器配置和路由处理程序进行单元测试。服务器配置测试处于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 的回答后,我受到启发,简单地将陈述移到任何describe
或before
之外的最顶部,现在测试都运行起来没有问题。
- 找不到模块'它'当用摩卡/柴测试时
- 如何将 XML 文件包含在摩卡测试用例中
- 用于摩卡测试的 CLI 调试器
- 如何在摩卡测试中使用“定义”
- 错误:使用摩卡测试时找不到模块
- 我可以从摩卡测试MarkLogic SJS吗
- 用摩卡测试失败的承诺'内置的promise支持
- 使用带量角器的摩卡无法通过超时测试
- 未定义的Es6级在单元测试中与大口摩卡
- 从命令行一次运行大量摩卡测试的好方法是什么
- 如何在多个文件中设置摩卡测试用例的执行顺序
- 摩卡/柴异步测试 'done()' fn 不起作用
- 没有数据的摩卡单元测试
- 摩卡 API 测试 - PUT 路线
- 为呈现的页面设置一个简单的幻影/摩卡测试
- 从节点运行摩卡测试
- 与业力和摩卡的异步测试
- 不能在我的摩卡测试中使用require,通过大口大口的业力跑步者
- 摩卡.测试几个测试.js
- 如何测试摩卡中未捕获的错误