为什么 Cucumber 引发 AmbiguousStepDefinitionsException?

Why does Cucumber raise AmbiguousStepDefinitionsException?

cucumber.runtime.AmbiguousStepDefinitionsException: ✽.Given I am an admin user(src/test/resources/features/alerts.feature:9) matches more than one step definition:
  I am an admin in LoginStepDefinitions.iAmAnAdmin()
  ^I am an admin user$ in AlertsStepDefinitions.iAmAUser()

    at cucumber.runtime.RuntimeGlue.stepDefinitionMatch

我给出了两个不同的定义。我不确定为什么会出现此错误。

您收到此错误是因为

/I am an admin/ # in LoginStepDefinitions.iAmAnAdmin()

/^I am an admin user$/ # in AlertsStepDefinitions.iAmAUser()

都匹配

"I am an admin user" # at src/test/resources/features/alerts.feature:9

第一个正则表达式匹配第二个正则表达式所做的一切,因此任何匹配第二个正则表达式的步骤都将匹配两者并导致此错误。

您可以通过使第一个正则表达式不是第二个正则表达式的子集来修复它。一种选择是将第一个正则表达式更改为

/^I am an admin$/

我通常认为要求步骤定义与整个步骤匹配(即以 ^ 开始并以 $ 结束)是个好主意,直​​到我找到不这样做的充分理由。但这取决于您如何组织您的步骤,以便它们都明确无误并且对 reader.

有意义