Mocha测试失败,错误来自"before all"钩子

BrD*_*aHa 3 mocha.js node.js

根据我的理解,如果before方法中出现一些错误,mocha测试框架将抛出​​此错误:

> $(npm bin)/mocha test/*.js


  1) "before all" hook
Run Code Online (Sandbox Code Playgroud)

我尝试了许多不同的东西来捕捉这个错误,但似乎没有任何工作:

before(function(done) {
  server = require('../app')
  try {
    server.listen(process.env.PORT)
    done()
    // server.initialize()
    //   .then(() => {
    //     console.info('listening on', process.env.PORT)
    //     server.listen(process.env.PORT, done)
    //   })
    //   .catch(err => {
    //     console.log(err)
    //     done(err)
    //   })
  } catch (err) {
    console.log('outer error', err)
    done(err)
  }
})
Run Code Online (Sandbox Code Playgroud)

从注释掉的代码中,您可以看到服务器具有我需要在服务器实际开始侦听之前完成的异步操作.似乎唯一有效的方法是在before块外部初始化服务器,并done()before函数中立即调用,或者传递不带参数的函数.但是,这仍然是一个问题,因为在测试开始时服务器未初始化.

疯狂地,当我连接到调试器时,此代码可以工作,因此我甚至无法检查是否有错误.

BrD*_*aHa 6

当我发布这个问题时,我偶然发现了这个错误导致我发现我需要this.enableTimeouts(false)before函数的开头调用,如下所示:

let server
before(function(done) {
  this.enableTimeouts(false)  <----
  server = require('../app')
  server.initialize()
    .then(() => {
      console.info('listening on', process.env.PORT)
      server.listen(process.env.PORT, done)
    })
    .catch(err => {
      console.log(err)
      done(err)
    })
})
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助其他人进行几个小时的调试.