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

标签 grails spock geb

我在使用GEB + Spock的Grails中进行功能测试时遇到一些问题。如果我运行“test-app”,它总是会失败,但是如果我在“test-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似乎是一个不错的解决方案...

    问候
    托贝

    最佳答案

    我设法解决了这个问题,并在有兴趣的情况下为其他人编写了解决方案。通过使用geb报告功能(出色的工具!)找到了解决方案

    问题在于,在功能测试所针对的应用程序中,我大量使用了ZKUI,而zkui在不同的测试场景中生成了不同的html代码(是的,这确实很奇怪)。

    例如, Composer 中的一个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") }
    

    :)

    干杯
    /托贝

    关于grails - grails “test-app”无法通过功能性geb + spock测试,但是 “test-app -functional”成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10324664/

    相关文章:

    grails - 如何检测 Url 映射中的片段标识符?

    java - 更新spockframework 1.1后出现stockmap错误

    grails - Geb:元素不再附加到 waitFor 内的 DOM

    grails - grails spring安全插件-为什么AjaxAwareAuthenticationSuccessHandler总是删除保存的请求?

    javascript - 隐藏复选框但保留其存在

    node.js - 寻找grails前端插件

    java - 将 spring 从 4.3.x 降级到 3.2.x 后,spock 测试中的 Autowiring bean 为空

    eclipse - 从 Eclipse 内部使用模拟/ stub 运行 Spock-spec 时出现验证错误

    grails - 无法使用 AnglurJS 和 Geb 设置输入文本字段

    Geb 设置输入值,附加默认值