Spec-Zone.ru › Kotlin 2

Запуск тестов в Kotlin/JS

Плагин Kotlin Multiplatform Gradle позволяет запускать тесты с помощью различных средств запуска тестов, которые можно указать в конфигурации Gradle.

Общий порядок запуска тестов в Kotlin/JS: добавить зависимости для тестирования, настроить задачу тестирования в файле сборки, добавить тесты и запустить их.

Для тестирования в браузере можно выбрать один из вариантов:

  • Средство запуска тестов Karma.

  • Новый DSL для тестирования в браузере.

Проект Karma устарел. Новых функций и исправлений ошибок не ожидается. В качестве альтернативы попробуйте новый DSL Kotlin для тестирования в браузере.

Новый DSL для тестирования в браузере в настоящее время имеет статус экспериментального. Он может измениться в любое время. Для его использования требуется явно согласиться с помощью аннотации @OptIn(ExperimentalJsTestDsl::class).

Добавление зависимостей для тестирования

При создании мультиплатформенного проекта можно добавить зависимости для тестирования во все наборы исходного кода, включая целевую платформу JavaScript, указав одну зависимость в commonTest:

// build.gradle.kts
kotlin {
    sourceSets {
        commonTest.dependencies {
            implementation(kotlin("test")) // Enables test annotations and functionality in JS
        }
    }
}
// build.gradle
kotlin {
    sourceSets {
        commonTest {
            dependencies {
                implementation kotlin("test") // Enables test annotations and functionality in JS
            }
        }
    }
}

Настройка браузеров

В Kotlin/JS можно запускать тесты в определенных браузерах. Для этого измените настройки в блоке конфигурации browser {} файла сборки Gradle.

По умолчанию плагин использует Headless Chrome для запуска тестов в браузере. По умолчанию плагин Kotlin Multiplatform Gradle не включает в себя браузеры. Чтобы подключить дополнительные браузеры, используйте блок testTask {} для Karma и блок test {} для нового DSL тестирования в браузере. Все доступные параметры приведены здесь:

kotlin {
    js {
        browser {
            testTask {
                useKarma {
                    useIe()
                    useSafari()
                    useFirefox()
                    useChrome()
                    useChromeCanary()
                    useChromeHeadless()
                    usePhantomJS()
                    useOpera()
                }
            }
        }
    }
}

Для использования Karma необходимо установить все нужные браузеры в целевой системе (локально или в CI).

Подробнее о возможностях Karma см. в разделе Настройка проекта Kotlin/JS.

import org.jetbrains.kotlin.gradle.ExperimentalJsTestDsl

kotlin {
    js {
        browser {
            @OptIn(ExperimentalJsTestDsl::class)
            test {
                chromium()
                firefox()
                webkit() // Safari browser
            }
        }
    }
}

При использовании нового DSL для тестирования в браузере плагин Kotlin Multiplatform Gradle при первом запуске устанавливает необходимые браузеры с помощью команды playwright install. Затем Playwright управляет расположением этих браузеров и не использует браузеры, установленные локально.

Дополнительные параметры нового DSL для тестирования в браузере см. в разделе Расширенная конфигурация.

Добавление теста

Чтобы проверить, что тесты выполняются правильно, создайте файл src/jsTest/kotlin/AppTest.kt со следующим содержимым:

import kotlin.test.Test
import kotlin.test.assertEquals

@Test
fun thingsShouldWork() {
    assertEquals(listOf(3,2,1), listOf(1,2,3).reversed())
}

@Test
fun thingsShouldBreak() {
    assertEquals(listOf(1,2,3), listOf(1,2,3).reversed())
}

Запуск тестов

Чтобы запустить тесты в браузере, выполните задачу jsBrowserTest или используйте значки на полях в IntelliJ IDEA для запуска всех тестов или отдельных тестов:

Gradle browserTest task

Кроме того, чтобы запустить тесты в командной строке, используйте оболочку Gradle:

./gradlew jsBrowserTest

После запуска тестов в IntelliJ IDEA в окне инструментов Запуск отображаются результаты. Чтобы просмотреть трассировку стека для неудачных тестов и перейти к соответствующей реализации теста, дважды щелкните такой тест.

Test results in IntelliJ IDEA

После каждого запуска тестов, независимо от способа запуска, в build/reports/tests/jsBrowserTest/index.html можно найти отчет Gradle с форматированием. Откройте этот файл в браузере, чтобы увидеть обзор результатов тестирования:

Gradle test summary

Если вы используете набор примеров тестов из фрагмента выше, один тест пройдет, а другой завершится с ошибкой, поэтому успешными будут 50% тестов. Чтобы получить больше информации об отдельных тестовых случаях, воспользуйтесь ссылками:

Stacktrace of a failed test in the Gradle summary

Расширенная конфигурация

Этот раздел относится только к новому экспериментальному DSL для тестирования в браузере.

Новый DSL для тестирования в браузере разработан как минималистичный и не зависящий от конкретных инструментов. Текущая реализация включает:

  • Playwright выступает в роли драйвера браузера и средства управления дистрибутивами, поддерживающего браузерные движки Chromium, Firefox и WebKit (Safari).

  • Mocha выступает в роли средства запуска тестов.

  • webpack выступает в роли сборщика (в будущих выпусках его заменит Vite).

DSL предоставляет тайм-ауты, безголовый режим и параметры для отдельных средств запуска в виде свойств Gradle. Таким образом, вы можете использовать общие значения по умолчанию для разных средств запуска, переопределять их для конкретного браузера и вычислять значения отложенно с помощью провайдеров:

import org.jetbrains.kotlin.gradle.ExperimentalJsTestDsl
import kotlin.time.Duration.Companion.seconds

kotlin {
    js {
        browser {
            @OptIn(ExperimentalJsTestDsl::class)
            test {
                // Configures the default timeout for all runners with kotlin.Duration
                timeout = 30.seconds

                // Configures headless mode using Gradle providers
                headless = providers
                    .environmentVariable("IS_IN_CI")
                    .map { it.toBoolean() }
                    .orElse(false)

                // Enables and configures the Chromium runner with a custom name
                chromium("chromium-no-webgl2") {
                    // Overrides the default timeout for this runner
                    timeout = 10.seconds

                    // Chromium-specific extra launch argument
                    launchArgs.add("--disable-webgl2")
                }

                // Enables the Firefox runner
                firefox()

                // Enables and configures the WebKit runner
                webkit("safari") {
                    timeout = 35.seconds
                }
            }
        }
    }
}

Параметры для всех средств запуска тестов можно задать непосредственно в блоке test {}. Чтобы переопределить эти общие параметры для определенного средства запуска, укажите для него собственное имя и задайте другие значения в блоке средства запуска. В этом примере браузеры Chromium и WebKit (Safari) используют тайм-ауты 10 и 35 секунд соответственно, а Firefox использует общий тайм-аут в 30 секунд.

Каждое средство запуска регистрируется под собственным именем, поэтому в отчете о тестировании указано, в каком браузере получен тот или иной результат.

Настройка для авторов плагинов

Этот раздел относится только к новому экспериментальному DSL для тестирования в браузере.

Если вы разрабатываете плагин Gradle на основе плагина Kotlin Multiplatform Gradle, новый DSL для тестирования в браузере также предоставляет доступ к средствам запуска браузеров и расположению созданного пакета тестов.

Kotlin создает пакет тестов для запуска тестов в браузере, используя стандартную страницу запуска тестов. Ее можно заменить, указав другое расположение в свойстве testsLocation:

kotlin {
    js {
        browser {
            @OptIn(ExperimentalJsTestDsl::class)
            test {
                // Implement customJsTestsLocation to modify or replace the default JS test bundle
                @OptIn(DelicateKotlinGradlePluginApi::class)
                testsLocation = customJsTestsLocation(extendFrom = defaultTestsLocationProvider)

                chromium()
            }
        }
    }
}

Ваш собственный сборщик тестов может включать собственный сервер разработки, сборщик или средство запуска тестов. Свойство defaultTestsLocationProvider предоставляет доступ к стандартному расположению, позволяя использовать его как основу вместо реализации всего с нуля.

Для каждого расположения тестов через интерфейс KotlinJsTestsLocation доступны каталог с созданным пакетом тестов (bundleLocation), имя страницы тестов (testHtmlFileName) и URL-адрес, который открывает браузер (url).

С помощью этих API можно:

  • Настроить URL-адрес, который открывает браузер. У каждого средства запуска браузера есть собственное расположение тестов, поэтому его можно переопределить для всех средств запуска в блоке test {} или для отдельного средства запуска.

  • Переопределить само расположение пакета, например, чтобы добавить в пакет дополнительные файлы.

  • Выполнить постобработку созданного пакета тестов. Зарегистрируйте собственную задачу и измените в ней файлы до того, как браузер их откроет, например, чтобы добавить собственную конфигурацию в test.html.

При создании плагинов с помощью этих API учитывайте следующие ограничения:

  • Настройка subtarget.test включает новый конвейер тестирования и отключает Karma. В настоящее время нет надежного способа определить, какой конвейер выбрал пользователь.

  • Нет надежного способа отложенно настроить конкретное средство запуска браузера, поэтому настройку необходимо выполнять в afterEvaluate. Вместо этого предложите пользователям явно задать расположение тестов или предоставьте декорирующие функции, например myPluginChromium().

Оставить отзыв

Новый DSL для тестирования в браузере активно разрабатывается. В следующих выпусках Kotlin планируется добавить новые функции, например отладку.

Будем признательны за отзывы в YouTrack или в канале Slack #javascript.

4 сентября 2026 г.
Отладка кода Kotlin/JSФреймворки Kotlin/JS

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/js-running-tests.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API