Как правильно проверить соединение через веб-сокет с KotlinJS
Я не могу проверить мой код, который использует нативный WebSocket
, Это тело тестовой функции:
val webSocket = WebSocket("ws://localhost:8888")
window.setTimeout({
assertEquals(WebSocket.OPEN, webSocket.readyState)
}, 1000)
Я использую Карму с тестом Мокко. Следующий код выполняется без ошибок, но setTimeout
фактически игнорируется и никогда не выполняется.
Мокко, кажется, поддерживает setTimeout
тесты с --delay
, Тем не менее, когда я использую флаг с client: { mocha: { delay: true } }
Конфигурация кармы, тесты просто зависают и дают сбой, выводя следующее сообщение о причине:
Отключен, потому что нет сообщения в 60000 мс.
Как правильно выполнять тесты с setTimeout
? Если это сложно, есть ли другой способ, которым я могу сделать утверждения на WebSocket
после того, как он полностью подключен? Я пока не использую какие-либо специфичные для Mocha функции, поэтому я не против изменить структуру.
2 ответа
Возвращение Promise из функции @Test должно помочь. Что-то вроде:
@Test fun testWebSocket() = Promise<Unit> { resolve, reject ->
val webSocket = WebSocket("ws://localhost:8888")
window.setTimeout({
assertEquals(WebSocket.OPEN, webSocket.readyState)
resolve(Unit)
}, 1000)
}
Если вы хотите протестировать асинхронный код, вы должны сообщить тестовой среде, когда тест будет завершен. Смотрите этот ответ.