0

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

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

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

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

已断开连接,因为 60000 毫秒内没有消息。

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

4

2 回答 2

3

从您的 @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)
}
于 2018-02-16T11:13:29.333 回答
0

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

于 2018-02-15T09:44:48.753 回答