Какой инструмент покрытия кода использовать для кода javascript в многоплатформенном проекте Kotlin? - PullRequest
0 голосов
/ 10 июля 2020

Я могу использовать jacoco на стороне JVM, но что я могу использовать на стороне JS многоплатформенного проекта?

1 Ответ

2 голосов
/ 20 июля 2020

На данный момент нет интегрированных инструментов покрытия кода. Но вы можете реализовать это вручную, используя karma.config.d и https://karma-runner.github.io/0.8/config/coverage.html.

Примечание: вы можете сделать это только с browser target

Как настроить: Необходимо чтобы добавить зависимости, в идеале зависимости dev в набор тестовых источников, но зависимости dev возможны только с версии 1.4-M3, поэтому их можно заменить обычными npm

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

После этого создайте файл js в папка karma.config.d в папке проекта

;(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. Вы можете запустить задачу build или browserTest.

ПРИМЕЧАНИЕ. Если вы используете Windows, вам необходимо изменить include: [path.resolve(__dirname, '../module-name/kotlin/')] на include: [path.resolve(__dirname, '..\\module-name\\kotlin\\')]

...