Add filtering feature to karma testing
- Now karma use generated adapter.js as input, in which right runner and also all real input files are required #KT-32216 fixed
This commit is contained in:
+2
@@ -43,6 +43,8 @@ class NpmVersions {
|
||||
val karmaSourceMapLoader = NpmPackageVersion("karma-sourcemap-loader", "0.3.7")
|
||||
val karmaSourceMapSupport = NpmPackageVersion("karma-source-map-support", "1.4.0")
|
||||
|
||||
val browserProcessHrtime = NpmPackageVersion("browser-process-hrtime", "1.0.0")
|
||||
|
||||
val puppeteer = NpmPackageVersion("puppeteer", "1.19.0")
|
||||
|
||||
val kotlinNodeJsTestRunner = KotlinGradleNpmPackage("test-nodejs-runner")
|
||||
|
||||
+1
-1
@@ -6,7 +6,7 @@
|
||||
package org.jetbrains.kotlin.gradle.targets.js.testing
|
||||
|
||||
data class KotlinTestRunnerCliArgs(
|
||||
val moduleNames: List<String>,
|
||||
val moduleNames: List<String> = listOf(),
|
||||
val include: Collection<String> = listOf(),
|
||||
val exclude: Collection<String> = listOf(),
|
||||
val ignoredTestSuites: IgnoredTestSuitesReporting = IgnoredTestSuitesReporting.reportAllInnerTestsAsIgnored
|
||||
|
||||
+5
@@ -12,6 +12,7 @@ data class KarmaConfig(
|
||||
var basePath: String? = null,
|
||||
val files: MutableList<String> = mutableListOf(),
|
||||
val frameworks: MutableList<String> = mutableListOf(),
|
||||
val client: KarmaClient = KarmaClient(),
|
||||
val browsers: MutableList<String> = mutableListOf(),
|
||||
val customLaunchers: MutableMap<String, CustomLauncher> = mutableMapOf(),
|
||||
val reporters: MutableList<String> = mutableListOf(),
|
||||
@@ -19,6 +20,10 @@ data class KarmaConfig(
|
||||
var coverageReporter: CoverageReporter? = null
|
||||
)
|
||||
|
||||
data class KarmaClient(
|
||||
val args: MutableList<String> = mutableListOf()
|
||||
)
|
||||
|
||||
class CustomLauncher(var base: String) {
|
||||
val flags = mutableListOf<String>()
|
||||
var debug: Boolean? = null
|
||||
|
||||
+30
-3
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin
|
||||
import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework
|
||||
import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs
|
||||
import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig
|
||||
import org.jetbrains.kotlin.gradle.testing.internal.reportsDir
|
||||
import org.slf4j.Logger
|
||||
@@ -233,6 +234,9 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
}
|
||||
|
||||
private fun useWebpack() {
|
||||
createAdapterJs()
|
||||
requiredDependencies.add(versions.browserProcessHrtime)
|
||||
|
||||
requiredDependencies.add(versions.karmaWebpack)
|
||||
requiredDependencies.add(versions.webpack)
|
||||
|
||||
@@ -324,6 +328,25 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
}
|
||||
}
|
||||
|
||||
private fun createAdapterJs() {
|
||||
configurators.add {
|
||||
val npmProject = compilation.npmProject
|
||||
val files = it.nodeModulesToLoad.map { npmProject.require(it) }
|
||||
|
||||
val adapterJs = npmProject.dir.resolve("adapter.js")
|
||||
adapterJs.printWriter().use { writer ->
|
||||
val karmaRunner = npmProject.require("kotlin-test-nodejs-runner/kotlin-test-karma-runner.js")
|
||||
writer.println("require('$karmaRunner')")
|
||||
|
||||
files.forEach { file ->
|
||||
writer.println("require('$file')")
|
||||
}
|
||||
}
|
||||
|
||||
config.files.add(adapterJs.canonicalPath)
|
||||
}
|
||||
}
|
||||
|
||||
override fun createTestExecutionSpec(
|
||||
task: KotlinJsTest,
|
||||
forkOptions: ProcessForkOptions,
|
||||
@@ -343,15 +366,19 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF
|
||||
|
||||
val npmProject = compilation.npmProject
|
||||
|
||||
val files = task.nodeModulesToLoad.map { npmProject.require(it) }
|
||||
config.files.addAll(files)
|
||||
|
||||
config.basePath = npmProject.nodeModulesDir.absolutePath
|
||||
|
||||
configurators.forEach {
|
||||
it(task)
|
||||
}
|
||||
|
||||
val cliArgs = KotlinTestRunnerCliArgs(
|
||||
include = task.includePatterns,
|
||||
exclude = task.excludePatterns
|
||||
)
|
||||
|
||||
config.client.args.addAll(cliArgs.toList())
|
||||
|
||||
val karmaConfJs = npmProject.dir.resolve("karma.conf.js")
|
||||
karmaConfJs.printWriter().use { confWriter ->
|
||||
confWriter.println("// environment variables")
|
||||
|
||||
Reference in New Issue
Block a user