kotest вложенный spe c в описании - PullRequest
1 голос
/ 27 мая 2020

Я начал использовать kotest: 4.0.5 (kotlintest) и возникла проблема с функцией stringSpec, вложенной в предложение describe.

Пример:

class SellerTest : DescribeSpec({

    describe("Registration") {
        context("Not existing user") {
            include(emailValidation()
        }
    }
})

fun emailValidation() = stringSpec {
    "Email validation" {
        forAll(
            row("test.com"),
            row("123123123123123")
        ) { email ->
            assertSoftly {
                val exception =
                    shouldThrow<ServiceException> { Email(email) }

            }
        }
    }
}

If include(emailValidation()) находится за пределами предложения describe, тогда работает правильно.

Есть ли у вас идеи, как вложить спецификации / функции в предложения?

1 Ответ

2 голосов
/ 27 мая 2020

Вы можете использовать include только на верхнем уровне. Это часть того, как реализуются заводские тесты (для чего используется ключевое слово include) (возможно, это будет смягчено в будущих версиях).

Однако вы можете переместить все это в фабрику.

class SellerTest : DescribeSpec({
  include(emailValidation)
})

val emailValidation = describeSpec {

    describe("Registration") {
        context("Not existing user") {
            forAll(
                row("test.com"),
                row("123123123123123")
            ) { email ->
                assertSoftly {
                    val exception =
                        shouldThrow<ServiceException> { Email(email) }
                }
            }
        }
    }
}

И вы можете параметризовать присвоение имен всем, что захотите, поскольку это просто строки, например:

fun emailValidation(name: String) = describeSpec {
    describe("Registration") {
        context("$name") {
        }
    }
}

Если вы не параметризуете, то иметь тестовую фабрику бессмысленно. Просто объявите тестовый встроенный IMO.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...