Как правильно проверить соединение через веб-сокет с 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)
}

Если вы хотите протестировать асинхронный код, вы должны сообщить тестовой среде, когда тест будет завершен. Смотрите этот ответ.

Другие вопросы по тегам