0

我正在尝试使用 Kotest 编写嵌套测试,这些测试具有每个嵌套级别仅运行一次的钩子。这就是 mocha 在 JavaScript 中的工作方式以及 RSpec 在 ruby​​ 中的工作方式。在 mocha 中,该函数被调用before。我尝试使用beforeContainer,但它为每个嵌套容器运行一次,而不是为整个容器运行一次,包括该父容器中的任何嵌套容器。这很难解释,所以下面是一组我希望通过的测试,如果beforekotest 中存在行为类似于 mocha 或 RSpec 的方法。简而言之,每个before方法应该只被调用一次,并且只有在其容器中的测试运行时(例如,before内部的方法在"nested level 2"测试运行之前不应该"nested level 1"运行)。

package foo.bar

import io.kotest.core.spec.style.DescribeSpec
import io.kotest.matchers.shouldBe

class WidgetTest : DescribeSpec({
    var foo = "initial"
    var counterOne = 0
    var counterTwo = 0
    var counterThree = 0

    before {
        foo = "bar"
        counterOne++
    }

    it("foo should be bar") {
        foo shouldBe "bar"
        counterOne shouldBe 1
    }

    it("beforeSpec should have been called only once") {
        foo shouldBe "bar"
        counterOne shouldBe 1
    }

    it("counterTwo should be 0") {
        counterTwo shouldBe 0
    }

    it("counterThree should be 0") {
        counterThree shouldBe 0
    }

    describe("nested level 1") {
        before {
            foo = "buzz"
            counterTwo++
        }

        it("foo should be buzz") {
            foo shouldBe "buzz"
        }

        it("and counterOne should be 1") {
            counterOne shouldBe 1
        }

        it("and counterTwo should be 1") {
            counterTwo shouldBe 1
        }

        describe("nested level 2") {
            before {
                foo = "jazz"
                counterThree++
            }

            it("foo should be jazz") {
                foo shouldBe "jazz"
            }

            it("and counterOne should be 1") {
                counterOne shouldBe 1
            }

            it("and counterTwo should be 1") {
                counterTwo shouldBe 1
            }

            it("and counterThree should be 1") {
                counterThree shouldBe 1
            }
        }
    }
})

before如果我制作第一个abeforeSpec和另外两个beforeContainer(并将它们移动到每个嵌套容器上方),我可以接近我想要的,但随后counterTwo会增加两次:一次 for"nested level 1"和一次 for "nested level 2"。我不确定我是否只是做错了什么,或者这个功能在 kotest 中根本不存在。

4

0 回答 0