grails“test-app”无法进行功能性geb + spock测试,但“test-app -functional”成功

时间:2012-04-25 22:21:53

标签: grails spock geb

我在使用GEB + Spock的Grails中进行功能测试时遇到了一些问题。如果我运行“test-app”它总是会失败,但是如果我在 app“之前运行”test-app -integration“它就可以了!

以下测试序列说明了我的问题:

运行#1

grails> clean
grails> test-app -functional
...
Tests PASSED

运行#2

grails> clean
grails> test-app
...
Tests FAILED

运行#3

grails> clean
grails> test-app -functional
...
Test PASSED
grails> test-app
...
Test PASSED

失败的测试是抛出“geb.waiting.WaitTimeoutException:条件在10.0秒内未通过”。值得注意的是,失败的测试用例正在等待数据库查询的结果。

所以我的问题是,功能测试通过“test-app -integration”与“test-app”运行后究竟有什么不同?

与我的想法唯一的区别是“test-app”正在运行所有测试阶段(单元,集成,功能)。

奇怪的是它以某种方式运行,但前提是我首先运行“test-app -integration”:/

我使用以下设置:

  • grails 2.0.1
  • geb 0.7.0
  • spock 0.6
  • htmlunit-driver 2.0rc3(香港专业教育学院试过2.20.0,但给了我更多的问题)

真的希望有人可以帮助我。 Geb + spock似乎是一个很好的解决方案, 它的工作原理......

此致 Tobbe

1 个答案:

答案 0 :(得分:2)

如果有兴趣的话,我设法解决了这个问题,并在此处为其他人编写解决方案。通过使用geb报告功能(很棒的工具!)找到了解决方案。

问题是我在应用程序中使用grails ZKUI很多功能测试正在反对,zkui在不同的测试场景中生成了不同的html代码(是的,这真的很奇怪)。

例如作曲家的zk按钮:

<z:button id="simpleSearchButton" class="simpleSearchButton"/>

运行“test-app -integration”时,它会生成以下内容:

<span id="cECQ4" class="simpleSearchButton z-button"><table id="cECQ4-box" style=""     cellpadding="0" cellspacing="0" border="0"><tbody><tr><td class="z-button-tl"/><td class="z-button-tm"/><td class="z-button-tr"/></tr><tr><td class="z-button-cl"><button type="button" id="cECQ4-btn" class="z-button"/></td><td class="z-button-cm"><img src="/certservice-admin/images/search.png;jsessionid=2ADDD6FA5F1D011A96E447435514BDA2" align="absmiddle"/></td><td class="z-button-cr"><div></div></td></tr><tr><td class="z-button-bl"/>td class="z-button-bm"/><td class="z-button-br"/></tr></tbody></table></span>

但是当运行“test-app”时,它产生了以下内容:

<button type="button" id="l9AP4" class="simpleSearchButton z-button-os"><img src="/certservice-admin/images/search.png;jsessionid=835A2B8A3FE0C54341BB4F109A0CCC62" align="absmiddle"/></button>

在我的Page对象中,我将按钮定义为:

simpleSearchButton(required: false) { $("span.simpleSearchButton") }

哪个“test-app”失败但没有“test-app -integration”。解决困难/奇怪问题的简单方法是:

simpleSearchButton(required: false) { $(".simpleSearchButton") }

:)

干杯 / Tobbe