如何从Cucumber-JVM中的另一个步骤调用一个步骤

Eri*_*ord 8 scala cucumber cucumber-jvm

在Cucumber(ruby版本)中,您可以轻松地从其他步骤调用步骤,从而构建分层的步骤库,以便以最通用的术语轻松编写Gherkin功能规范.

但是在Cucumber-JVM中如何做到这一点并不明显,我一直无法找到它的文档.

让我说清楚我对直接调用步骤实现函数不感兴趣,因为我不想知道它的签名是什么,也不想在每次实现更改时更改调用.

相反,我想传递一个任意字符串,它将通过正则表达式匹配器并自动找到匹配步骤并执行它.正如引擎运行所有步骤一样.

我希望语法看起来像定义同义词"logout"的简单示例:

When("user logs out") { () =>
  d.executeScript("logout();")
}
When("logout") { () =>
  Step("user logs out")
}
Run Code Online (Sandbox Code Playgroud)

Seb*_*ose 5

Cucumber-JVM不支持此功能。(请注意,您在问题中链接的Cucumber Backgrounder文档将“步骤”中的“步骤”描述为“反模式”)

本质上,我们认为Cucumber是一种协作工具,而Gherkin不是一种编程语言。

您可以在此处看到有关我们如何做出此决定的更长距离的讨论

  • 有人可能要从其他步骤中调用步骤还有其他原因。处理通用同义词,或组合多个步骤(可能来自另一个步骤定义库),而不必知道底层函数的名称。您确定了潜在功能的单次使用不当,并决定将婴儿和洗澡水一起扔掉,这是一个反对使用者的决定。 (4认同)
  • 当然,这意味着如果我想定义该同义词,则必须在命名方法中定义实现并使用该方法,当然,这需要在其自己的.java文件中,该文件包含29行导入和打包声明和类定义等等等,而不是我的示例中的2行。 (2认同)