Testing 类无法将模块解析为内容,除非使用@Stepwise
我有一个Spock类,当作为测试套件运行时,抛出Testing 类无法将模块解析为内容,除非使用@Stepwise,testing,automation,spock,geb,Testing,Automation,Spock,Geb,我有一个Spock类,当作为测试套件运行时,抛出无法将iconRow解析为geb.Page的内容,或作为其导航器上下文的属性。iconRow是您忘记导入的类吗?除非我用@Stepwise注释我的类。然而,我真的不希望测试执行在第一次失败时停止,就像@Stepwise那样 我曾尝试使用post编写(复制和粘贴)我自己的扩展,但仍然会出现这些错误。它使用我的扩展,因为我添加了一些打印到控制台的日志语句 以下是我的一个模块: class IconRow extends Module { sta
无法将iconRow解析为geb.Page的内容,或作为其导航器上下文的属性。iconRow是您忘记导入的类吗?
除非我用@Stepwise注释我的类。然而,我真的不希望测试执行在第一次失败时停止,就像@Stepwise那样
我曾尝试使用post编写(复制和粘贴)我自己的扩展,但仍然会出现这些错误。它使用我的扩展,因为我添加了一些打印到控制台的日志语句
以下是我的一个模块:
class IconRow extends Module {
static content = {
iconRow (required: false) {$("div.report-toolbar")}
}
}
以及使用它的页面:
class Report extends SomeOtherPage {
static at = {$("div.grid-container").displayed}
static content = {
iconRow { module IconRow }
}
}
以及失败的测试片段:
class MyFailingTest extends GebReportingSpec {
def setupSpec() {
via Dashboard
SomeClass.login("SourMonk", "myPassword")
assert page instanceof Dashboard
nav.goToReport("Some report name")
assert page instanceof Report
}
@Unroll
def "I work"() {
given:
at Report
expect:
this == that
where:
this << ["some list", "of values"]
that << anotherModule.someContent*.@id
}
@Unroll
def "I don't work"() {
given:
at Report
expect:
this == that
where:
this << ["some other", "list", "of values"]
that << iconRow.columnHeaders*.attr("innerText")*.toUpperCase()
}
}
class MyFailingTest扩展了GebReportingSpec{
def setupSpec(){
通过仪表板
SomeClass.login(“SourMonk”、“myPassword”)
断言仪表板的页面实例
导航goToReport(“某些报告名称”)
断言报表的页实例
}
@展开
定义“我工作”(){
鉴于:
在报告中
期望:
这个=那个
哪里:
此Geb对@逐步
有特殊支持,如果使用它注释规范,则在每次测试后它不会调用resetBrowser()
,而是在规范完成后调用。请参阅上的代码
因此,基本上您需要将setupSpec
更改为setup
,以便在每次测试之前执行
根据您的观察,如果您只是运行一个集中测试,则会对该测试执行setupSpec
,因此它会通过。问题是,随后会调用清理并重置浏览器,从而中断后续测试
编辑
我忽略了您使用的where
块,where块中的所有内容都需要静态(@Shared
)可用,因此使用实例级构造将不起作用。重置浏览器也将杀死所有引用,因此之前获取引用也不起作用。基本上,不要在where
块中使用Geb对象
但是,看看你的代码,我看不出有任何理由在这里使用数据驱动测试
在一个普通测试中,只需一个断言就可以很容易地做到这一点
单元测试只测试一件事是一个很好的实践。然而,Geb不是一个单元测试,而是一个验收/前端测试。这里的问题是,它们比单元测试慢得多,将合理的断言组合到一个测试中是有意义的
因此,我尝试将setupSpec()的内容移动到setup()中测试仍然失败,出现了同样的错误。在GebSpec中是否有重写这些方法的方法?谢谢,Leonard,这是为我工作的--我想我对框架有一个简单的误解。那么,是什么允许在“expect”中访问Geb对象而不是在“where”中访问呢?@SourMonkwhere
是“执行”的在实际测试运行之前,因为它为测试提供了输入数据,所以这通常不是问题,除非使用了非静态数据。expect
是测试本身的一部分。这里的图像可能有助于更好地理解它
class MyFailingTest extends GebReportingSpec {
def setup() {
via Dashboard
SomeClass.login("SourMonk", "myPassword")
assert page instanceof Dashboard
nav.goToReport("Some report name")
assert page instanceof Report
}
def "I work"() {
given:
at Report
expect:
["some list", "of values"] == anotherModule.someContent*.@id
}
def "I don't work"() {
given:
at Report
expect:
["some other", "list", "of values"] == iconRow.columnHeaders*.attr("innerText")*.toUpperCase()
}
}