`npm test` 永远不会退出
`npm test` never exits
我使用 mocha 来 运行 我的单元测试,并且经常使用 npm test
来 运行 它。我的 package.json
包含这些脚本定义:
"pretest": "NODE_ENV=test node migrate all",
"test": "DEBUG= NODE_ENV=test mocha --recursive",
如果我 运行 这些命令中的任何一个直接在我的 shell 中(即不经过 npm
),它们执行得很好(790 个测试需要大约 2m 到 运行, 迁移脚本在 1 秒内完成)。这些进程也干净地退出。
但是,如果我通过 npm test
运行 这些,所有 运行 都以完全相同的方式进行,但进程不会退出(我必须手动取消它^c
).
我不知道如何准确地调试这里发生的事情,以便找出进程没有退出的原因。
值得注意的是,如果我测试一个子目录 (npm test ./test/queue
),它 根本 不与数据库交互,那么进程会正常退出。然而,这些测试确实与 AMQP 代理交互,因此在套接字上有一些 activity。这向我表明数据库连接导致了问题。我正在使用 knex 连接到 postgres9.6
服务器。这也表明 pretest
脚本不是问题所在。如果我尝试 运行 一组 做 与数据库交互的测试,进程永远不会退出(所以大概打开的套接字阻止它这样做,但为什么这个应该只发生在 npm test
的情况下,而不是直接执行超出我的范围。
额外信息:
- 节点版本:8.7.0
- 摩卡版本:4.0.1
- npm 版本:5.6.0
- knex 版本:0.14.0
- 我在我的代码库中使用
async
/await
我误以为这是一个 npm
问题。相反,当我在 shell 中 运行 mocha
时,它使用的是全局安装的 mocha
,它与本地安装的版本不同。 运行 此版本导致相同的挂起问题。
此行为变化似乎来自 this issue, which is described thus in the changelog:
By default, Mocha will no longer force the process to exit once all tests complete. This means any test code (or code under test) which would normally prevent node from exiting will do so when run in Mocha. Supply the --exit flag to revert to pre-v4.0.0 behavior (@ScottFreeCode, @boneskull)
我使用 mocha 来 运行 我的单元测试,并且经常使用 npm test
来 运行 它。我的 package.json
包含这些脚本定义:
"pretest": "NODE_ENV=test node migrate all",
"test": "DEBUG= NODE_ENV=test mocha --recursive",
如果我 运行 这些命令中的任何一个直接在我的 shell 中(即不经过 npm
),它们执行得很好(790 个测试需要大约 2m 到 运行, 迁移脚本在 1 秒内完成)。这些进程也干净地退出。
但是,如果我通过 npm test
运行 这些,所有 运行 都以完全相同的方式进行,但进程不会退出(我必须手动取消它^c
).
我不知道如何准确地调试这里发生的事情,以便找出进程没有退出的原因。
值得注意的是,如果我测试一个子目录 (npm test ./test/queue
),它 根本 不与数据库交互,那么进程会正常退出。然而,这些测试确实与 AMQP 代理交互,因此在套接字上有一些 activity。这向我表明数据库连接导致了问题。我正在使用 knex 连接到 postgres9.6
服务器。这也表明 pretest
脚本不是问题所在。如果我尝试 运行 一组 做 与数据库交互的测试,进程永远不会退出(所以大概打开的套接字阻止它这样做,但为什么这个应该只发生在 npm test
的情况下,而不是直接执行超出我的范围。
额外信息:
- 节点版本:8.7.0
- 摩卡版本:4.0.1
- npm 版本:5.6.0
- knex 版本:0.14.0
- 我在我的代码库中使用
async
/await
我误以为这是一个 npm
问题。相反,当我在 shell 中 运行 mocha
时,它使用的是全局安装的 mocha
,它与本地安装的版本不同。 运行 此版本导致相同的挂起问题。
此行为变化似乎来自 this issue, which is described thus in the changelog:
By default, Mocha will no longer force the process to exit once all tests complete. This means any test code (or code under test) which would normally prevent node from exiting will do so when run in Mocha. Supply the --exit flag to revert to pre-v4.0.0 behavior (@ScottFreeCode, @boneskull)