使用 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