如何使用 Kotlin JS 正确测试 websocket 连接

How to properly test web socket connection with KotlinJS

我无法测试使用本机 WebSocket 的代码。这是测试函数的主体:

val webSocket = WebSocket("ws://localhost:8888")
window.setTimeout({
    assertEquals(WebSocket.OPEN, webSocket.readyState)
}, 1000)

我将 Karma 与 Mocha 测试运行器一起使用。下面的代码执行没有任何错误,但是 setTimeout 实际上被忽略并且从未执行过。

Mocha 似乎支持使用 --delay 基于 setTimeout 的测试。但是,当我将标志与 client: { mocha: { delay: true } } Karma 配置一起使用时,测试只是冻结并失败,输出以下原因消息:

Disconnected, because no message in 60000 ms.

使用 setTimeout 执行测试的正确方法是什么?如果这很棘手,有没有其他方法可以在 WebSocket 完全连接后对它执行断言?我还没有使用任何 Mocha 特定的功能,所以我不介意更改框架。

如果你想测试异步代码,你需要在测试完成时告诉测试框架。 看到这个

从您的 @Test 函数返回 Promise 应该可以解决问题。 类似于:

@Test fun testWebSocket() = Promise<Unit> { resolve, reject ->
    val webSocket = WebSocket("ws://localhost:8888")
    window.setTimeout({
        assertEquals(WebSocket.OPEN, webSocket.readyState)
        resolve(Unit)
    }, 1000)
}