`npm test`永不退出

GTF*_*GTF 2 unit-testing mocha.js node.js npm

我使用mocha来运行我的单元测试,并经常使用npm test它来运行它.我package.json包含这些脚本定义:

"pretest": "NODE_ENV=test node migrate all",
"test": "DEBUG= NODE_ENV=test mocha --recursive",
Run Code Online (Sandbox Code Playgroud)

如果我直接在我的shell中运行这些命令中的任何一个(即不通过npm),它们执行正常(790个测试需要大约2米才能运行,迁移脚本在1秒内完成).这些过程也会干净利落地退出.

但是,如果我运行这些npm test,则所有内容都以完全相同的方式运行,但进程不会退出(我必须手动取消它^c).

我无法弄清楚如何调整这里正在发生的事情,以便弄清楚为什么进程没有退出.

值得一提的是,如果我测试的子目录(npm test ./test/queue)不互动在所有与数据库,那么过程退出罚款.但是,这些测试会与AMQP代理进行交互,因此在套接字上会有一些活动.这告诉我数据库连接导致了问题.我正在使用knex连接到postgres9.6服务器.这也表明pretest脚本不是问题.如果我尝试运行一系列测试,其与数据库交互,过程永远不会退出(因此可能打开的套接字阻止它这样做,但为什么这应该只在的情况下发生的npm test,而不是直接执行是超越我).

额外信息:

  • 节点版本:8.7.0
  • 摩卡版:4.0.1
  • npm版本:5.6.0
  • knex版本:0.14.0
  • 我正在使用async/ await在我的代码库中

GTF*_*GTF 10

我错误地认为这是一个npm问题.相反,当我mocha在我的shell 中运行时,它使用的是全局安装的mocha,它与本地安装的版本不同.使用此版本运行会导致相同的悬挂问题.

此行为的更改似乎来自此问题,因此在更改日志中对此进行了描述:

默认情况下,一旦所有测试完成,Mocha将不再强制进程退出.这意味着在Mocha中运行时,通常会阻止节点退出的任何测试代码(或测试中的代码)都会这样做.提供--exit标志以恢复到v4.0.0之前的行为(@ScottFreeCode,@ boneskull)