Завершение теста Mocha с использованием Express, Socket.io и Node-Telegram-Bot-Api - PullRequest
0 голосов
/ 26 июня 2018

Завершение теста Mocha с использованием Express, Socket.io и Node-Telegram-Bot-Api

Я пишу тесты с Mocha для скрипта, который использует express, socket.io и node-telegram-bot-api.

Тест mocha не закрывается после выполнения всех тестов, поэтому я думаю, что один из этих трех еще выполняет свою работу в фоновом режиме, что не позволяет сценарию завершиться.

Я добавил функцию, которая вручную закрывает express (и вместе) socket.io (server.close ()), но скрипт продолжает работать.

Я думаю, что node-telegram-bot-api все еще слушает сообщения. Можно ли как-то разорвать соединение, аналогично функции close (), предоставляемой express?


Обновление

С тех пор я узнал о функции bot.stopPolling () , но мне это не помогло.

Когда я запускаю тест mocha с wtfnode, я получаю следующий вывод:

[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

Действительно не уверен, что делать с этой информацией.

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

У меня была такая же проблема, когда тест мокко не закрывался после того, как все тесты пройдены. Согласно этому:

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

, чтобы избежать ложных срабатываний и поощрять лучшие методы тестирования, Mocha больше не будет автоматически убивать себя через process.exit (), когда считает, что это нужно сделать во время работы. Итак, я установил wtfnode пакет. Мой предыдущий вывод был похож на ваш. Я решил это, добавив "_" к "mocha" в пути package.json следующим образом:

"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
0 голосов
/ 27 июня 2018

Я приближался к этому с неправильного угла.

Вместо создания экземпляра класса, который я тестировал в каждом блоке it(() => {}, более разумно поместить все эти вещи в хук before(() => {}) в качестве переменной класса.

Я решил проблему с отсутствующей функцией телеграммы, выполнив process.exit (1) в хуке after(() => {}).

Эта последняя часть, вероятно, не лучшая практика, но она решила мою проблему.

...