如何解决运行测试 kotlin 多平台时出错 kotlinx-coroutines-test for js with Error: Fail to fetch
我正在使用解决方法来测试通用代码中的协程。最推荐的解决方法,似乎对很多人都有效kotlinx-coroutines-test for multiplatform,但是通过 js 测试失败了。知道为什么失败或者是否有人遇到过这个问题? 还是我做错了什么?
为 JVM 运行测试通过但为 js 运行失败并出现错误
Error: Fail to fetch
Error: Fail to fetch
at Object.captureStack(/Users/ipkiss/code/Multiplatform-sample-project/build/js/node_modules/kotlin/kotlin/builtins.kt:103)
at <global>.new Error(/Users/ipkiss/code/Multiplatform-sample-project/build/js/packages/Multiplatform-sample-project-test/adapter-browser.js:71220)
at <global>.<unkNown>(/Users/ipkiss/code/Multiplatform-sample-project/build/js/node_modules/ktor-ktor-client-core-jsLegacy/ktor-ktor-client-core-jsLegacy.js:179408)
runBlockingTest 对上面例子中的 JS 实现如下
//expected
expect fun runBlockingTest(block: suspend () -> Unit)
expect val testCoroutineContext: CoroutineContext
//actual
val testScope = MainScope()
actual val testCoroutineContext: CoroutineContext = testScope.coroutineContext
actual fun runBlockingTest(block: suspend () -> Unit): dynamic = testScope.promise { block() }
我的测试看起来像这样
@Test
fun should_make_http_call() = runBlockingTest {
val response = HttpCall.request("https://stackoverflow.com/")
assertTrue { response.contains("Stack Overflow - Where Developers Learn") }
}
这是我的依赖项。
val ktor_version = "1.5.1"
val kotlin_version = "1.4.0"
repositories {
mavenCentral()
jcenter()
}
kotlin {
jvm {
compilations.all {
kotlinoptions.jvmTarget = "1.8"
}
testRuns["test"].executionTask.configure {
useJUnit()
}
}
js(LEGACY) {
browser {
testTask {
useKarma {
useChromeHeadless()
webpackConfig.cssSupport.enabled = true
}
}
}
}
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.ktor:ktor-client-core:$ktor_version")
implementation("org.jetbrains.kotlin:kotlin-test-common:$kotlin_version")
implementation("org.jetbrains.kotlin:kotlin-test-annotations-common:$kotlin_version")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2")
}
}
val commonTest by getting {
dependencies {
implementation(kotlin("test-common"))
implementation(kotlin("test-annotations-common"))
}
}
val jvmMain by getting {
dependencies {
implementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
implementation("org.jetbrains.kotlin:kotlin-test:$kotlin_version")
}
}
val jvmTest by getting {
dependencies {
implementation(kotlin("test-junit"))
implementation("io.ktor:ktor-client-cio:$ktor_version")
implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.4.2")
}
}
val jsMain by getting {
dependencies {
implementation("io.ktor:ktor-client-js:$ktor_version")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2")
}
}
val jsTest by getting {
dependencies {
implementation(kotlin("test-js"))
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。