当使用内置'内部'步骤scoper时,黄瓜步骤模糊

时间:2011-06-10 06:19:13

标签: ruby-on-rails regex cucumber

我已经创建了一个自定义黄瓜步骤来检查链接的目的地,我正在使用Cucumber在web_steps中新的内置支持来确定这些查找的范围。所以我有两个黄瓜步骤:

# My step to verify the link
Then /^"([^\"]*)" should link to (.*)$/ do |link_text,page_name|
  page.should have_link(link_text, :href => path_to(page_name))
end

# Cucumber's built in step to scope things
# Single-line step scoper
When /^(.*) within ([^:]+)$/ do |step, parent|
  with_scope(parent) { When step }
end

我通过使用像

这样的黄瓜脚本来使用它
And "home" should link to the home page within the "Email Signature" section

我的问题是我在这两个步骤之间的上述模式匹配不明确,因为“内部”子句不能与“主页”分开,因为后者没有任何边界引号。

我已经尝试将链接步骤更改为这样读取,认为它可能通过不匹配“内部”来解决模糊性,但我认为'内部'会被前面的组吞噬:

Then /^"([^\"]*)" should link to (.*)(?!within)$/ do |link_text,page_name|
  page.should have_link(link_text, :href => path_to(page_name))
end

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:2)

不直接回答我提出的问题(因为这看到了Qtax的回答),但这就是我最后做的事情。无论如何,我认为这是一个更好的解决方案,因为它的价值......

我已经创建了一个自定义版本的作用域助手,如下所示:

Then /^within ([^,]*), (.+)$/ do |parent, step|
  with_scope(parent) { When step }
end

这允许我写这样的步骤:

And within the "Email Signature" section, "home" should link to the home page

我认为(a)读得更自然(我们谈论的是电子邮件签名部分中的链接,而不是主页更清楚),以及(b)解决我遇到的问题,因为未加引号的“内部”选择器完全不受未加引号的页面名称的影响。

答案 1 :(得分:1)

尝试类似:

/^"([^"]*)" should link to ((?:(?!within).)+)$/

对Cucumber一无所知,我只是按照你想做的去做。