【问题标题】:KotlinJS tests not including common classesKotlinJS 测试不包括公共类
【发布时间】:2019-10-03 02:25:01
【问题描述】:

我有一个编译为 JS 和 JVM 的多平台 kotlin 项目,具有以下构建配置:

常见 - build.gradle

plugins {
    id 'kotlin-platform-common' version '1.3.10'
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-common:1.3.10"
    compile 'org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.0.1'

    testCompile "org.jetbrains.kotlin:kotlin-test-annotations-common"
    testCompile "org.jetbrains.kotlin:kotlin-test-common"
}

js - build.gradle

plugins {
    id 'kotlin-platform-js' version '1.3.10'
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    expectedBy project(":Lib-common")

    compile "org.jetbrains.kotlin:kotlin-stdlib-js:1.3.10"
    compile 'org.jetbrains.kotlinx:kotlinx-coroutines-core-js:1.0.1'

    testCompile "org.jetbrains.kotlin:kotlin-test"
    testCompile "org.jetbrains.kotlin:kotlin-test-js"
}

compileKotlin2Js {
    kotlinOptions.outputFile = "${projectDir}/output/lib."
    kotlinOptions.moduleKind = "commonjs"
    kotlinOptions.metaInfo = false
}

compileTestKotlin2Js {
    kotlinOptions.outputFile = "${projectDir}/output/lib_test.js"
    kotlinOptions.moduleKind = "commonjs"
    kotlinOptions.metaInfo = false
}

jvm - build.gradle

plugins {
    id 'kotlin-platform-jvm' version '1.3.10'
}

repositories {
    mavenCentral()
    jcenter()
}

dependencies {
    expectedBy project(":Lib-common")

    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.10"
    compile 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.0.1'

    compile 'org.apache.httpcomponents:httpcore:4.4.11'
    compile 'org.apache.httpcomponents:httpclient:4.5.7'
    compile 'org.apache.httpcomponents:httpmime:4.5.7'

    testCompile "junit:junit:4.12"
    testCompile "org.jetbrains.kotlin:kotlin-test"
    testCompile "org.jetbrains.kotlin:kotlin-test-junit"
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

sourceCompatibility = "1.8"

我在 JVM 上按预期运行的公共模块中有一个测试。 JS模块通过compileKotlin2Js任务成功编译生成js文件,但是当我运行compileTestKotlin2Js时,公共模块中的测试类找不到它正在测试的类。这是我尝试运行compileTestKotlin2Js时的失败:

> Task :Lib-js:classes
e: <location>\Lib\Lib-common\src\test\kotlin\mypackage\ClientTest.kt: (3, 45): Unresolved reference: Client


FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Lib-js:compileTestKotlin2Js'.
> Compilation error. See log for more details

【问题讨论】:

    标签: gradle kotlin kotlin-multiplatform


    【解决方案1】:

    kotlin-platform-js gradle 插件不创建任务来运行测试,它只编译 main 和 test 源集中的 Kotlin 代码,所以你需要自己设置所有的 JS 测试基础设施。

    当所有代码都驻留在应用了kotlin-mutliplatform 插件的单个模块中时,我建议切换到新的多平台项目创作方法。该插件可以开箱即用地配置 JS 测试任务。

    此类项目的 build.gradle 文件如下所示:

    plugins {
        id 'org.jetbrains.kotlin.multiplatform' version '1.3.50'
    }
    repositories {
        mavenCentral()
    }
    group 'com.example'
    version '0.0.1'
    
    kotlin {
        jvm()
        js {
            nodejs { // target and run tests on node.js
            }
        }
    
        sourceSets {
            commonMain {
                dependencies {
                    implementation kotlin('stdlib-common')
                }
            }
            commonTest {
                dependencies {
                    implementation kotlin('test-common')
                    implementation kotlin('test-annotations-common')
                }
            }
            jvmMain {
                dependencies {
                    implementation kotlin('stdlib-jdk8')
                }
            }
            jvmTest {
                dependencies {
                    implementation kotlin('test')
                    implementation kotlin('test-junit')
                }
            }
            jsMain {
                dependencies {
                    implementation kotlin('stdlib-js')
                }
            }
            jsTest {
                dependencies {
                    implementation kotlin('test-js')
                }
            }
        }
    }
    

    您可以在此处阅读有关开发多平台项目的更多信息:https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html#building-multiplatform-projects-with-gradle

    【讨论】:

      猜你喜欢
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2013-08-05
      相关资源
      最近更新 更多