我在客户端JavaScript上使用wallaby.js运气很好,我想尝试让它在我的服务器端JavaScript上工作。但是,wallaby.js喜欢启动大量并行Web服务器,这会导致测试出现问题,因为它会导致EADDRINUSE
错误。
我的项目的基本脚手架是使用Yeoman angular-fullstack generator完成的,所以我的服务器代码位于/server
,大多数方法都在/server/api
。
到目前为止,我已经成功地使用以下配置进行工作:
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
}
};
};
在这里你可以看到我将小袋鼠工人的数量设置为1并且不允许它回收工人。它第一次工作正常,但在我开始编辑文件后偶尔会出现EADDRINUSE
错误。
是否有一种首选机制可以使用带有express的wallaby.js并避免它在同一端口上产生多个测试服务器进程,从而消除了EADDRINUSE
错误?
答案 0 :(得分:7)
名称有点令人困惑,但recycle: true
会欺骗。 recycle: false
表示一旦启动节点进程将永久重用。
我理解并不总是可以使用并行进程(尤其是使用DB测试),但为了使其适用于Web服务器,您可以在运行测试时将0指定为端口,因此它可以使用并行进程。我会挑选一个随机的。
var server = require('http').createServer();
server.listen(0);
这样,wallaby将能够并行运行您的测试并重用流程。