我想在每个'when'步骤(Spock(中执行操作takeScreen((。如何在不在每个"何时"步骤中调用此函数的情况下做到这一点。
def "doSomeAction"() {
when:
doSmth()
takeScreen()
then:
at SomePage
when:
doAction()
takeScreen()
then:
at SomePage
}
def takeScreen(){
//code there
}
你不能。有什么大不了的?
顺便说一句,假设您正在使用Geb + Spock来测试某种Web应用程序,以防万一takeScreen()
旨在截取屏幕截图,为什么不从GebReportingSpec
中获取Geb测试并使用report "After login"
左右?
更新:解决方法是向类或仅向全局 Spock 配置添加一个小帮助程序方法,并在when:
或then:
之后调用它。有关如何执行此操作的详细信息,请参阅此处的回答。代替(或除了(打印标签,您可以做takeScreen()
应该做的任何事情,或者只是从那里调用它。如果你想在when:
开头调用它,请确保像when:_ "bla"
一样调用该方法,如果你想像你的例子一样在最后调用它,你可以在后续then:
中调用它,比如then:_ "bla"
。但我不认为你应该这样做,在你的情况下,这只是信息隐藏。测试应该准确显示它的作用。在我的项目中,开发人员在帮助程序方法内部多次遇到问题,尤其是在 Geb 中,由于偏离主题的原因和太复杂而无法在此处解释的失败测试的屏幕截图。