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