首页 > 解决方案 > Geb DSL 模块在 Intellij 中无法识别

问题描述

离开这里的文档模块和其他 Geb DSL 预计不会在 IntelliJ 的 Spock 规范中被识别?这使得在没有 DSL 参考的情况下使用带有 IntelliJ 的 Geb 有点麻烦。我从这个问题中注意到,提问者做了一些自定义工作来让 IntelliJ 包装并注意到 Geb DSL。

我的问题是我做错了什么还是这是意料之中的,在让 IntelliJ 识别 Geb DSL 方面有任何进展吗?

如果没有,是否有人对此问题/限制和/或其他识别 Geb DSL 的 IDE 有解决方法?

标签: intellij-ideaspockdslgeb

解决方案


IntelliJ 支持 Geb DSL,我已经使用了很多年,甚至 IntelliJ 的代码库中的测试证实了它的存在

如果您可以分享您的代码的外观以及哪些内容不适合您,那么我们可能会发现您的设置或期望存在问题。最好知道您使用的是社区版还是专业版。

请注意,您链接到的问题中讨论的问题已由我在此 PR中修复,并且自 IntelliJ 2018.2 以来不再存在。

编辑:

在阅读了您在我的回复下的评论后,我现在明白了问题所在。您的期望是 IntelliJ 将能够在运行时确定页面类型并为您提供自动完成功能。恐怕这根本不可能——您需要在代码中跟踪当前页面实例,以便 IntelliJ 能够推断类型。

请注意,geb-example-gradle中的测试以非常简洁但动态的风格编写,这意味着 IntelliJ 无法推断类型。您需要做的是使用文档中描述的强类型样式。文档的那部分可以做一些改进,因为它不精确 - 我创建了一个 Github 问题来跟踪它

本质上,如果您将GebishOrgSpec从 geb-example-gradle 调整为:

class GebishOrgSpec extends GebSpec {

    def "can get to the current Book of Geb"() {
        when:
        def homePage = to GebishOrgHomePage

        and:
        homePage.manualsMenu.open()

        then:
        homePage.manualsMenu.links[0].text().startsWith("current")

        when:
        homePage.manualsMenu.links[0].click()

        then:
        at TheBookOfGebPage
    }
}

然后 IntelliJ 将为您提供自动完成功能。


推荐阅读