在 Gherkin 中使用正确的语法
Using proper grammar in Gherkin
查找有关 Gherkin 的文档似乎非常困难,所以我想知道是否有一种方法可以增加步骤定义以使测试人员能够使用正确的语法。一个说明我的意思的例子是:
...Testing...
Then I see there is 1 item
...More testing...
Then I see there are 2 items
显然,这两个步骤将使用相同的代码。我定义了这样一个几乎可以工作的步骤定义:
Then(/^I see there (is|are) (\d+) item(s)?$/) do |item_count|
...code...
end
除了问题是它将 is/are
和可选的复数 s
解释为参数。有没有什么办法可以让 Gherkin 知道这些只是为了允许正确的语法?
在组的开头使用 ?: 将其标记为非捕获,Cucumber 不会将其作为参数传递。
/^I see there (?:is|are) (\d+) item(?:s)?$/
这些步骤不必使用相同的代码。相反,他们可以调用相同的代码。如果您应用此模式,您就可以专注于您的步骤,只做他们应该做的一件事,即使用表达良好的自然语言来触发代码。所以...
module ItemStepHelper
def see_items(count:)
...
end
World ItemStepHelper
Then 'I see there is one item' do
see_items(count: 1)
end
Then 'I see there are \d+ items' do |count|
see_items(count: count)
end
很明显,这个例子有更多的样板,但好处很少,但是当你将模式应用于更实际的例子时,好处就会真正开始发挥作用。特别是你永远不必编写一个非常复杂的步骤定义的正则表达式(实际上我 90% 或更多的步骤定义甚至不使用正则表达式)。
查找有关 Gherkin 的文档似乎非常困难,所以我想知道是否有一种方法可以增加步骤定义以使测试人员能够使用正确的语法。一个说明我的意思的例子是:
...Testing...
Then I see there is 1 item
...More testing...
Then I see there are 2 items
显然,这两个步骤将使用相同的代码。我定义了这样一个几乎可以工作的步骤定义:
Then(/^I see there (is|are) (\d+) item(s)?$/) do |item_count|
...code...
end
除了问题是它将 is/are
和可选的复数 s
解释为参数。有没有什么办法可以让 Gherkin 知道这些只是为了允许正确的语法?
在组的开头使用 ?: 将其标记为非捕获,Cucumber 不会将其作为参数传递。
/^I see there (?:is|are) (\d+) item(?:s)?$/
这些步骤不必使用相同的代码。相反,他们可以调用相同的代码。如果您应用此模式,您就可以专注于您的步骤,只做他们应该做的一件事,即使用表达良好的自然语言来触发代码。所以...
module ItemStepHelper
def see_items(count:)
...
end
World ItemStepHelper
Then 'I see there is one item' do
see_items(count: 1)
end
Then 'I see there are \d+ items' do |count|
see_items(count: count)
end
很明显,这个例子有更多的样板,但好处很少,但是当你将模式应用于更实际的例子时,好处就会真正开始发挥作用。特别是你永远不必编写一个非常复杂的步骤定义的正则表达式(实际上我 90% 或更多的步骤定义甚至不使用正则表达式)。