1

我可以在 JVM 端使用 jacoco,但我可以在 Multiplatform 项目的 JS 端使用什么?

4

1 回答 1

2

目前,还没有集成的代码覆盖工具。但是您可以使用https://karma-runner.github.io/0.8/config/coverage.htmlkarma.config.d手动实现它。

注意:您只能使用browser目标来执行此操作

如何设置:需要添加依赖,理想情况下将 dev 依赖添加到测试源集中,但 dev 依赖只能从 1.4-M3 开始,因此可以将它们替换为通常的npm

implementation(devNpm("istanbul-instrumenter-loader", "3.0.1"))
implementation(devNpm("karma-coverage-istanbul-reporter", "3.0.3"))

之后在项目文件夹的 karma.config.d 文件夹中创建 js 文件

;(function(config) { // just IIFE to protect local variabled
    const path = require("path") // native Node.JS module
    config.reporters.push("coverage-istanbul")
    config.plugins.push("karma-coverage-istanbul-reporter")
    config.webpack.module.rules.push(
        {
            test: /\.js$/,
            use: {loader: 'istanbul-instrumenter-loader'},
            include: [path.resolve(__dirname, '../module-name/kotlin/')] // here is necessary to use module-name in `build/js/packages`
        }
    )
    config.coverageIstanbulReporter = {
        reports: ["html"]
    }
}(config));

它适用于 Kotlin 代码(但老实说报告是有争议的),但无论如何,它提供了 js 和 Kt 文件的统计信息,但 js 表示 0%。

我创建了一个功能请求:https ://youtrack.jetbrains.com/issue/KT-40460

更新:带有结果的 HTML 文件位于build/js/packages/{$module-name}-test/coverage/index.html. 您可以运行buildbrowserTest任务。

注意:如果您在 Windows 上,则必须更改include: [path.resolve(__dirname, '../module-name/kotlin/')]include: [path.resolve(__dirname, '..\\module-name\\kotlin\\')]

于 2020-07-20T11:27:06.120 回答