在 express 项目中使用 wallaby.js 时避免使用 EADDRINUSE
Avoiding EADDRINUSE when using wallaby.js with an express project
我在客户端 JavaScript 上使用 wallaby.js 非常幸运,我想尝试让它在我的服务器端 JavaScript 上运行。但是,wallaby.js 喜欢启动大量并行 Web 服务器,这会导致测试出现问题,因为它会不断抛出 EADDRINUSE
错误。
我的项目的基本脚手架是使用 Yeoman angular-fullstack generator 完成的,所以我的服务器代码位于 /server
中,大部分方法位于 /server/api
.[=18= 中]
到目前为止,我已经设法让它可以使用以下配置:
module.exports = function () {
return {
files: [
'server/**/*.js',
{ pattern: 'server/**/*.spec.js', ignore: true }
],
tests: [
'server/**/*.spec.js'
],
env: {
type: 'node',
},
debug: true,
workers: {
initial: 1,
regular: 1,
recycle: false
}
};
};
在这里你可以看到我将 wallaby worker 的数量设置为 1 并且不允许它回收 worker。第一次运行良好,但在我开始编辑文件后,偶尔会出现 EADDRINUSE
错误。
是否有一种首选机制可以将 wallaby.js 与 express 一起使用并避免它在同一端口上生成多个测试服务器进程,从而消除 EADDRINUSE
错误?
名称有点混乱,但 recycle: true
可以解决问题。 recycle: false
表示一旦启动节点进程将永远重复使用。
我知道并不总是可以使用并行进程(尤其是数据库测试),但要使其适用于 Web 服务器,您可以在 运行ning 测试时将端口指定为 0,因此它将随机挑选并使用一个。
var server = require('http').createServer();
server.listen(0);
通过这种方式 wallaby 将能够运行您的测试并行并重用过程。
我在客户端 JavaScript 上使用 wallaby.js 非常幸运,我想尝试让它在我的服务器端 JavaScript 上运行。但是,wallaby.js 喜欢启动大量并行 Web 服务器,这会导致测试出现问题,因为它会不断抛出 EADDRINUSE
错误。
我的项目的基本脚手架是使用 Yeoman angular-fullstack generator 完成的,所以我的服务器代码位于 /server
中,大部分方法位于 /server/api
.[=18= 中]
到目前为止,我已经设法让它可以使用以下配置:
module.exports = function () {
return {
files: [
'server/**/*.js',
{ pattern: 'server/**/*.spec.js', ignore: true }
],
tests: [
'server/**/*.spec.js'
],
env: {
type: 'node',
},
debug: true,
workers: {
initial: 1,
regular: 1,
recycle: false
}
};
};
在这里你可以看到我将 wallaby worker 的数量设置为 1 并且不允许它回收 worker。第一次运行良好,但在我开始编辑文件后,偶尔会出现 EADDRINUSE
错误。
是否有一种首选机制可以将 wallaby.js 与 express 一起使用并避免它在同一端口上生成多个测试服务器进程,从而消除 EADDRINUSE
错误?
名称有点混乱,但 recycle: true
可以解决问题。 recycle: false
表示一旦启动节点进程将永远重复使用。
我知道并不总是可以使用并行进程(尤其是数据库测试),但要使其适用于 Web 服务器,您可以在 运行ning 测试时将端口指定为 0,因此它将随机挑选并使用一个。
var server = require('http').createServer();
server.listen(0);
通过这种方式 wallaby 将能够运行您的测试并行并重用过程。