使用 Express、Socket.io 和 Node-Telegram-Bot-Api 结束 Mocha 测试

Posted

技术标签:

【中文标题】使用 Express、Socket.io 和 Node-Telegram-Bot-Api 结束 Mocha 测试【英文标题】:Ending Mocha Test Using Express, Socket.io and Node-Telegram-Bot-Api 【发布时间】:2018-12-05 06:35:00 【问题描述】:

我正在使用 Mocha 为使用 express、socket.io 和 node-telegram-bot-api 的脚本编写测试。

mocha 测试在运行所有测试后没有关闭,所以我认为这三个中的一个仍在后台执行它的操作,这导致脚本无法完成。

我添加了一个手动关闭 express(以及联合)socket.io(server.close())但脚本继续运行的函数。

我的想法是 node-telegram-bot-api 仍在侦听消息。有没有办法让我终止连接,类似于 express 提供的 close() 函数?

更新

我后来发现了 bot.stopPolling() 函数,但这似乎对我不起作用。

当我使用 wtfnode 运行 mocha 测试时,我得到以下输出:

[WTF Node?] open handles:
- File descriptors: (note: stdio always exists)
  - fd 1 (tty) (stdio)
  - fd 2 (tty) (stdio)
- Child processes
  - PID 29442
    - Entry point: /home/user/projectNAME/node_modules/mocha/bin/mocha:72

真的不知道如何处理这些信息。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,在所有测试通过后 mocha 测试没有关闭。 据此:

https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit

为了避免误报并鼓励更好的测试实践,当 Mocha 认为应该运行时,它不会再通过 process.exit() 自动杀死自己。 所以,我安装了wtfnode 包。 我之前的输出和你的一样。 我通过在 package.json 路径中将“_”添加到“mocha”来解决它,如下所示:

"test": "npm run compile && NODE_ENV=TEST wtfnode node_modules/.bin/_mocha ./dist/**/*.spec.js"

现在我的输出如下所示:

    Server stopped.
^C[WTF Node?] open handles:
- File descriptors: (note: stdio always exists)
  - fd 1 (tty) (stdio)
  - fd 2 (tty) (stdio)
- Sockets:
  - 127.0.0.1:43960 -> 127.0.0.1:27017
  - 127.0.0.1:43964 -> 127.0.0.1:27017
  - 127.0.0.1:43966 -> 127.0.0.1:27017
  - 127.0.0.1:43968 -> 127.0.0.1:27017
  - 127.0.0.1:43970 -> 127.0.0.1:27017
- Timers:
  - (5000 ~ 5 s) (anonymous) @ /home/slava/eyescanlab/backend/node_modules/mongodb-core/lib/topologies/server.js:469
- Intervals:
  - (60000 ~ 60 s) (anonymous) @ /home/slava/eyescanlab/backend/dist/backend/src/services/internetConnection.service.js:26

【讨论】:

【参考方案2】:

我从错误的角度接近这个。

与其在每个 it(() => 块中实例化我正在测试的类,不如将所有这些东西作为类变量放在 before(() => ) 挂钩中更有意义。

我通过在after(() => )钩子中执行process.exit(1)解决了电报功能缺失的问题。

最后一部分可能不是最佳实践,但它解决了我的问题。

【讨论】:

以上是关于使用 Express、Socket.io 和 Node-Telegram-Bot-Api 结束 Mocha 测试的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Express、AngularJS、Socket.io 广播和获取通知?

如何在 express 和 socket.io 中使用护照?

与 socket.io 一起使用时 express-session 未设置会话 cookie

使用 socket.io 和 express 创建大厅

Socket.io 使用 node.js,根本没有 express?

使用 express.js 和 socket.io 构建推送通知系统的最佳方法