Я предполагаю, что вы ожидали, что заказ будет таким?
- гнездо перед подключением INIT
- гнездо закончено присоединение INIT
- до того, как клиент выпустит
- после того, как клиент испустит
Из-за небольшого количества приведенного кода проблема, вероятно, состоит в двух вещах.
Во-первых, и, возможно, основная проблема заключается в том, что ваш ioClient.connect не будет подключаться немедленно. Вам нужно передать какой-то обратный вызов и выдать INIT
, а затем выполнить функцию callback
теста, как только он действительно подключится.
Во-вторых, вы, вероятно, должны сделать то же самое с вашей командой run
. listen
не остановит прослушивание сразу, поэтому вы будете время от времени получать противоречивые результаты, если он не начнет слушать к тому времени, когда выполнит ваш тест. Вы также должны передать набор callback
в io.listen
.
Обновление
Для ясности listen
, как и большинство вещей в узле, метод listen
сервера socketio является асинхронным. Вызов метода указывает ему начать прослушивание, но в фоновом режиме есть время, когда сервер настраивает сетевые компоненты для начала прослушивания. Так же, как ядро узла listen
, версия http://nodejs.org/docs/latest/api/net.html#server.listen, socket.io принимает аргумент обратного вызова, который вызывается, когда сервер подключен и прослушивает.
io.listen(port, {'log level': 2}, callback);
Если socket.io не начнет сообщать об ошибках при невозможности подключения, это, вероятно, не проблема, но об этом следует помнить. Рассматривать асинхронные действия, как если бы они были мгновенными, - это простой способ делать ошибки, которые появляются только изредка. Поскольку ваши run
обертывания слушают, я думаю, что в целом, не только для тестирования, передача обратного вызова на run
была бы очень хорошей идеей.