9

我创建了一个多平台 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()) }
}

如果没有,我如何在 JS 平台上重现类似的功能runBlocking

4

1 回答 1

5

Mb 已经很晚了,但是在 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() } 
于 2018-05-10T10:58:29.037 回答