每当我使用带参数的静态内容定义的闭包时,IntelliJ会抱怨类型不匹配(即使我在闭包内指定了类型)。
例如,如果我使用此静态内容块:
static content = {
myModule { $('myModule').module(CustomModule) }
namedModule { String name -> $(".$name").module(CustomModule) }
}
上述两个项目都可以在我的测试中成功使用,但如果我在我的一个测试中使用'namedModule',如下所示:
page.namedModule("moduleName").moduleMethod("blah blah blah")
IntelliJ将以黄色突出显示参数“moduleName”,错误为:
'namedModule'不能应用于'(java.lang.String)'
我们试图以一种方式重构我们的测试,这意味着您可以更轻松地浏览代码(例如,避免IntelliJ无法解决的任何Geb / Groovy'魔术'),这是最后一个阻止的问题之一这是可能的。
答案 0 :(得分:0)
这是IntelliJ中Geb支持的已知限制。 IntelliJ始终将内容定义视为页面和模块的属性,即使它们可以进行参数化。鉴于IntelliJ中的Geb支持是开源的,我们可能会增加对此的支持。
同时,作为一种解决方法,您可以使用参数化内容的方法而不是内容定义,IntelliJ将能够理解这些并能够重构它们:
void namedModule(String name) {
$(".$name").module(CustomModule)
}
但有一些警告:
_
),您只能从页面或模块中访问RequiredPageContentNotPresent
;要解决这个问题,你需要为每个这样的方法添加手动验证,或者使用第一个要点中概述的策略,使用" private"内容定义