Hi, I'm attempting to use kotest's datatest module...
# kotest
s
Hi, I'm attempting to use kotest's datatest module in a multiplatform project that targets kotlin/js when attempting to use the datatest module, I get an error:
IllegalStateException: Nested tests are not supported
Currently, my test code looks roughly like this:
Copy code
kotlin
val precomputed = listOf(/* values passed to withData */)

context("test message") {
   withData(precomputed) {
        // test logic
    }
}
additionally, I am getting a bunch of warnings:
Copy code
WARN: Duplicated test name should not be less than 0. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should be 0 for identical strings. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should not be greater than 1 or less than 1. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should not be less than 0. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should not be less than 0. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should be 0 for identical strings. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should be 0 for identical strings. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should not be greater than 1 or less than 1. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should not be less than 0. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should be 0 for identical strings. To disable this message, set DuplicateTestNameMode to Silent.
WARN: Duplicated test name should not be greater than 1 or less than 1. To disable this message, set DuplicateTestNameMode to Silent.
is there any way I can fix these issues?
e
Try ditching the context (put withData on root level)
o
s
@Emil Kantis I don't want to remove the
context
call, as I have various tests all in the same class, and removing it would massively pollute the test log
The current workaround I'm using is I have a function
Copy code
kotlin
expect fun FunSpecRootScope.testPrecomputed(
    context: String,
    precomputed: List<FuzzyTestData>,
    similarityFunction: (String, String) -> Double,
)
in my common source set, and then in native & jvm source sets I have
Copy code
kotlin
actual fun FunSpecRootScope.testPrecomputed(
    context: String,
    precomputed: List<FuzzyTestData>,
    similarityFunction: (String, String) -> Double,
) {
    context(context) {
        withData(precomputed) {
            similarityFunction(it.first, it.second) shouldBe (it.similarity plusOrMinus DEFAULT_TOLERANCE)
        }
    }
}
but in the js source set I have
Copy code
kotlin
actual fun FunSpecRootScope.testPrecomputed(
    context: String,
    precomputed: List<FuzzyTestData>,
    similarityFunction: (String, String) -> Double,
) {
    context(context) {
        precomputed.forEach {
            withClue({ getStableIdentifier(it) }) {
                similarityFunction(it.first, it.second) shouldBe (it.similarity plusOrMinus DEFAULT_TOLERANCE)
            }
        }
    }
}