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

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

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

【问题讨论】:

    标签: node.js express socket.io mocha.js telegram


    【解决方案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)解决了电报功能缺失的问题。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 2015-05-11
        • 1970-01-01
        • 1970-01-01
        • 2019-02-08
        相关资源
        最近更新 更多