使用Express、Socket.io和Node-Telegram-Bot-Api结束Mocha测试
我正在用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我真的不知道该怎么理解这些信息。
发布于 2018-06-27 05:37:50
我从错误的角度来处理这个问题。
与其实例化我在每个it(() => {}块中测试的类,不如将所有这些东西放在before(() => {})钩子中作为一个类变量。
我通过在after(() => {})钩子中执行process.exit(1)解决了缺少电报函数的问题。
最后一部分可能不是最佳实践,但它解决了我的问题。
发布于 2018-11-19 15:53:55
我也有同样的问题,当mocha测试在所有测试通过后没有关闭。根据这一点:
https://boneskull.com/mocha-v4-nears-release/#mochawontforceexit
为了避免误报并鼓励更好的测试实践,Mocha将不再在它认为应该完成运行时通过process.exit()自动终止自己。所以,我安装了wtfnode包。我之前的输出和你的一样。我解决这个问题的方法是在package.json path的"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:26https://stackoverflow.com/questions/51044567
复制相似问题