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?
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)
| 归档时间: |
|
| 查看次数: |
374 次 |
| 最近记录: |