Grails 如何在intelliJ 12中定义cucumber的步骤定义位置

Grails 如何在intelliJ 12中定义cucumber的步骤定义位置,grails,intellij-idea,cucumber,geb,Grails,Intellij Idea,Cucumber,Geb,我在src/resources/com/features中有我的功能文件,在src/main/java/com/step\u定义中有我的步骤定义 我的测试都正常运行,但intelliJ拒绝查看步骤定义的位置,即使我要求它创建一个新的步骤定义。这是在哪里配置的?默认约定是在功能目录下的步骤定义子文件夹中定义步骤定义。子文件夹的名称并不重要;无论名字是什么,它都会起同样的作用 我的猜测是IDE将遵循相同的约定,因此如果将step_definitions文件夹移动到features文件夹下,Intel

我在
src/resources/com/features中有我的
功能文件
,在
src/main/java/com/step\u定义中有我的
步骤定义


我的测试都正常运行,但intelliJ拒绝查看步骤定义的位置,即使我要求它创建一个新的步骤定义。这是在哪里配置的?

默认约定是在
功能目录下的
步骤定义子文件夹中定义
步骤定义。子文件夹的名称并不重要;无论名字是什么,它都会起同样的作用

我的猜测是IDE将遵循相同的约定,因此如果将step_definitions文件夹移动到features文件夹下,IntelliJ应该正确执行功能

cucumber命令
使用
-r
选项在执行功能之前需要文件。此选项可用于在非常规位置查找步骤定义

我猜您的本地配置中可能有
-r src/main/java/com/step_定义
,以便cucumber在从命令行调用时查看这些step_定义


运行cumber--verbose
显示命令行在何处查找步骤定义代码

我也遇到了同样的问题(我的背景是Java、Ruby、Cucumber和RubyMine,但我对IntelliJ和Cucumber JVM完全陌生)

run configuration
中,您必须指定步骤定义存储在
glue
字段中的包,如中所述。IntelliJ——至少对我来说——似乎没有提供默认值

为了进一步说明,一个非常基本的项目如下所示:

Example
└───src
    ├───main
    │   └───java
    └───test
        ├───java
        │   └───com
        │       └───bensnape
        │           └───example
        │                   MyStepdefs.java
        └───resources
                example.feature
        test
        ├───cucumber
        │   └───steps
        │   └───support
        │   └───features
        └───unit
这里的
glue
值应该是
com.bensnape.example

更新 在今天早上再次使用IntelliJ之后,如果您遵守JVM约定,它似乎确实为您提供了
glue
价值,即功能必须在
src/test/resources/
下运行,同样,步骤必须在
src/test/java/
下运行

项目树示例:

Example
└───src
    ├───main
    │   └───java
    └───test
        ├───java
        │   └───com
        │       └───bensnape
        │           └───example
        │                   MyStepdefs.java
        │
        └───resources
            └───com
                └───bensnape
                    └───example
                            example.feature

如果将文件夹标记为(测试)源根目录(右键单击文件夹->将目录标记为->(测试)源根目录),它也可以工作

我的grails项目设置如下:

Example
└───src
    ├───main
    │   └───java
    └───test
        ├───java
        │   └───com
        │       └───bensnape
        │           └───example
        │                   MyStepdefs.java
        └───resources
                example.feature
        test
        ├───cucumber
        │   └───steps
        │   └───support
        │   └───features
        └───unit

单元被标记为测试源根,在也将cumber标记为一个之后,步骤定义被正确解析。

我在版本12.1.3中遇到了相同的问题。我的文件夹和文件是按照其他答案中描述的标准方式设置的,将代码标记为测试源并没有解决问题


然后我更新到12.1.6,问题已经解决:)

您可以通过打开“编辑配置->默认值->Cucumber Java->glue”全局设置粘合位置,并添加包名


(Intellij12.1.4)

所以我现在重构了我的代码,看起来这似乎没有什么帮助。我还运行了配置,并将com.step_定义输入到粘合路径(默认配置)。我没有在这里输入任何其他内容,因为我不确定要放什么,可能这只会影响运行,而不会影响IDE?奇怪的是,它现在会拾取我的step def文件,当我选择帮助器创建step_定义时,它会给我一个文件列表,我可以将其放在其中。然而,它仍然坚持(即使在文件中添加了新方法)步骤定义未定义。你解决问题了吗?如果没有,也许你可以尝试用更多的信息更新这个问题,因为很难准确地看到你所面临的问题。我尝试将我的步骤定义移动到features/step_定义中,但似乎仍然找不到它们:(这是我的grails项目的答案。谢谢。