将wallaby.js与快速项目一起使用时,避免使用EADDRINUSE

Pri*_*ett 4 testing node.js express

我在客户端JavaScript上使用wallaby.js运气很好,我想尝试让它在我的服务器端JavaScript上工作​​.但是,wallaby.js喜欢启动大量并行Web服务器,这会导致测试出现问题,因为它会继续抛出EADDRINUSE错误.

我的项目的基本脚手架是使用Yeoman angular-fullstack生成器完成的,因此我的服务器代码就位于其中,/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
    }
  };
};
Run Code Online (Sandbox Code Playgroud)

在这里你可以看到我将小袋鼠工人的数量设置为1并且不允许它回收工人.它第一次工作正常,但在我开始编辑文件后偶尔会EADDRINUSE出现错误.

是否有一种首选机制可以使用带有express的wallaby.js并避免它在同一端口上产生多个测试服务器进程,从而消除EADDRINUSE错误?

Art*_*rov 7

这个名字有点令人困惑,但recycle: true会有诀窍.recycle: false意味着一旦启动节点进程将永远重用.

我知道并不总是可以使用并行进程(特别是使用DB测试),但为了使它适用于Web服务器,您可以在运行测试时将0指定为端口,因此它将选择并使用随机进程.

  var server  = require('http').createServer();
  server.listen(0);
Run Code Online (Sandbox Code Playgroud)

通过这种方式,wallaby将能够并行运行测试并重用流程.