如何用协同程序对Kotlin-JS代码进行单元测试?

ego*_*dan 6 kotlin kotlinx.coroutines

我创建了一个多平台的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 ->
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试使用单元测试kotlin.test,对于JVM平台,我只是使用runBlocking如下:

@Test
fun sampleTest() {
    val req = Request(/* ... */)
    runBlocking { assertEquals( /* ... */ , req.loadText()) }
}
Run Code Online (Sandbox Code Playgroud)

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

kur*_*urt 5

Mb 已经晚了,但是在 js-tests 中添加使用函数的可能性存在开放性问题suspend(该函数将透明转换为 promise)

解决方法

可以在公共代码中定义:

expect fun runTest(block: suspend () -> Unit)
Run Code Online (Sandbox Code Playgroud)

这是在 JVM 中实现的

actual fun runTest(block: suspend () -> Unit) = runBlocking { block() }
Run Code Online (Sandbox Code Playgroud)

并在 JS 中

actual fun runTest(block: suspend () -> Unit): dynamic = promise { block() } 
Run Code Online (Sandbox Code Playgroud)

  • 我正在努力让 JS 工作,到底是什么错字? (2认同)