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

如何使用KotlinJS正确测试web套接字连接,kotlin,mocha.js,karma-mocha,kotlin-interop,kotlin-js-interop,Kotlin,Mocha.js,Karma Mocha,Kotlin Interop,Kotlin Js Interop,我无法测试使用本机WebSocket的代码。这是测试功能的主体: val webSocket = WebSocket("ws://localhost:8888") window.setTimeout({ assertEquals(WebSocket.OPEN, webSocket.readyState) }, 1000) 我在用卡玛和摩卡试跑者。下面的代码执行时没有任何错误,但是setTimeout实际上被忽略并且从未执行 Mocha似乎支持基于setTimeout的测试,带有--延迟

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

val webSocket = WebSocket("ws://localhost:8888")
window.setTimeout({
    assertEquals(WebSocket.OPEN, webSocket.readyState)
}, 1000)
我在用卡玛和摩卡试跑者。下面的代码执行时没有任何错误,但是
setTimeout
实际上被忽略并且从未执行

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

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


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

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

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

从@Test函数返回承诺应该可以做到这一点。 比如:

@Test fun testWebSocket() = Promise<Unit> { resolve, reject ->
    val webSocket = WebSocket("ws://localhost:8888")
    window.setTimeout({
        assertEquals(WebSocket.OPEN, webSocket.readyState)
        resolve(Unit)
    }, 1000)
}
@Test fun testWebSocket()=承诺{解决,拒绝->
val webSocket=webSocket(“ws://localhost:8888”)
window.setTimeout({
assertEquals(WebSocket.OPEN、WebSocket.readyState)
决议(单位)
}, 1000)
}

从@Test函数返回承诺应该可以做到这一点。 比如:

@Test fun testWebSocket() = Promise<Unit> { resolve, reject ->
    val webSocket = WebSocket("ws://localhost:8888")
    window.setTimeout({
        assertEquals(WebSocket.OPEN, webSocket.readyState)
        resolve(Unit)
    }, 1000)
}
@Test fun testWebSocket()=承诺{解决,拒绝->
val webSocket=webSocket(“ws://localhost:8888”)
window.setTimeout({
assertEquals(WebSocket.OPEN、WebSocket.readyState)
决议(单位)
}, 1000)
}

是的,我最终使用了Mocha绑定,并使用
description
/
it
使用
done
回调。请注意,使用
Promise
也可以实现。让测试返回承诺,并在完成断言时调用
resolve
。是的,我最终使用了Mocha绑定,并使用
description
/
it
使用
done
回调。注意,也可以使用
promise
实现。完成断言后,让测试返回承诺并调用
resolve
。承诺支持是在1.2.20中添加的,应该在Mocha、Jasmine和Jest中工作。这不是最终的设计,很可能会有一种更方便的方法。如果测试可以使用
done:()->单元
回调,这会很方便,就像Mocha解决这个问题的方法一样。但是,我认为基于
Promise
的方法目前是最好的,因为它不需要外部绑定。Promise支持是在1.2.20中添加的,应该在Mocha、Jasmine和Jest中使用。这不是最终的设计,很可能会有一种更方便的方法。如果测试可以使用
done:()->单元
回调,这会很方便,就像Mocha解决这个问题的方法一样。然而,我认为基于
Promise
的方法目前是最好的,因为它不需要外部绑定。