如何使用KotlinJS正确测试Web套接字连接

时间:2018-02-14 19:54:23

标签: kotlin mocha karma-mocha kotlin-interop kotlin-js-interop

我无法测试使用原生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的功能,所以我不介意改变框架。

2 个答案:

答案 0 :(得分:2)

从@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)
}

答案 1 :(得分:0)

如果要测试异步代码,则需要在测试完成时告知测试框架。 见answer