我创建了一个多平台的Kotlin项目(JVM& JS),宣布了一个预期的类并实现了它:
// Common module:
expect class Request(/* ... */) {
suspend fun loadText(): String
}
// JS implementation:
actual class Request actual constructor(/* ... */) {
actual suspend fun loadText(): String = suspendCoroutine { continuation ->
// ...
}
}
现在我尝试使用kotlin.test
进行单元测试,对于JVM平台,我只需使用runBlocking
,如下所示:
@Test
fun sampleTest() {
val req = Request(/* ... */)
runBlocking { assertEquals( /* ... */ , req.loadText()) }
}
如果没有runBlocking
?
答案 0 :(得分:3)
虽然已经很晚了,但是有一个开放的issue可以增加在js-tests中使用suspend
函数的可能性(这个函数将透明转换为promise)
解决方法强>:
可以在通用代码中定义:
expect fun runTest(block: suspend () -> Unit)
使用
在JVM中实现actual fun runTest(block: suspend () -> Unit) = runBlocking { block() }
和JS一起
actual fun runTest(block: suspend () -> Unit): dynamic = promise { block() }