所以这是一个非常新的问题。
我有一个看起来像这样的步骤:
Then /^I should see ((phrase 1) | (phrase 2))$/ do
#stuff
end
之后,我有一个看起来像这样的步骤:
Then /^I should see phrase 3$/ do
And %{I should see phrase 2}
end
我正在尝试测试注册流程。
phrase 1
描述了需要填写的所需信息,我需要验证它们是否显示在用户的个人资料中。
phrase 3
描述了用户填写所需的和可选信息。可选信息应该显示在用户的个人资料中,我想测试它也会显示出来。
我不想复制和粘贴第一步中的内容,所以我重新措辞phrase 1
,以便从phrase 3
步骤调用它是有道理的,但我不知道知道如何在第一步中正确引用它以使其工作。我从Cucumber获得的是I should see phrase 2
未定义。
这项工作的正确方法是什么?有没有更好的方法来实现我的目标?
答案 0 :(得分:4)
空白字符在正则表达式中非常重要
如果管道两端都有空格,则需要使用此步骤:
Then %{I should see phrase 1 }
或
Then %{I should see phrase 2}
(注意第一个末端的额外空格,第二个末尾的see
和phrase2
之间的额外空间)。正则表达式仍在查找您指定它们的空格字符。
您的正则表达式需要更改为:
Then /^I should see (phrase 1|phrase 2)$/ do |phrase_name|
end
正则表达式中的|
符号将匹配 左侧的所有字符,或右侧的所有字符(当然,parantheses对其进行限制)所以它不需要整个字符串。)
此外,您必须将值传递给块,就像我使用phrase_name
一样,当您以这种方式使用括号时。虽然我可能更愿意看到这样定义的步骤:
Then /^I should see phrase ([\d]+)$/ do |phrase_number|
end
因此它将匹配您的所有三种短语类型,并且您将不再需要短语1定义。 [\ d] +将匹配任何数字字符1次或更多次。
然后,您可以根据发送的phrase_number做任何您需要做的事情。我有兴趣看到你的情景定义,但我不确定你是否正在根据这些信息正确地进行调整。如果我看到故事的其余部分,也许我可以得到一些背景。