Ruby on rails 使用内置'时的步骤模糊;在';步进示波器

Ruby on rails 使用内置'时的步骤模糊;在';步进示波器,ruby-on-rails,regex,cucumber,Ruby On Rails,Regex,Cucumber,我已经创建了一个自定义cucumber步骤来检查链接的目的地,并且我正在使用cucumber在web_步骤中的新内置支持来确定这些查找的范围。所以我有两个步骤: # 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 # C

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

# 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
我通过使用cucumber脚本来使用它,比如

And "home" should link to the home page within the "Email Signature" section
我的问题是,在这两个步骤之间,我在上面得到了模棱两可的匹配,因为'within'子句不能与“thehomepage”区分开来,因为后者没有任何限定引号

我尝试将链接步骤改为如下,认为它可能会通过不匹配“内”来解决歧义,但我认为“内”会被前面的组吞并:

Then /^"([^\"]*)" should link to (.*)(?!within)$/ do |link_text,page_name|
  page.should have_link(link_text, :href => path_to(page_name))
end
有没有关于如何解决这个问题的想法?

试试以下方法:

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

我对Cucumber一点也不了解,我只是按照你的想法去做。

不是直接回答我提出的问题(请参见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
这使我可以编写如下步骤:

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)解决了我遇到的问题,因为不带引号的“内”选择器与不带引号的页面名完全不同。

Hi Qtax-抱歉,还没有机会尝试它-别担心我会:)太好了,谢谢@Qtax,效果很好:)很抱歉,测试它花了这么长时间-我在做其他事情时意外破坏了我的构建,不得不先修复它!P.S.也找到了另一种解决方案/解决办法,我认为我最终更喜欢这种解决方案/解决办法,我将在下面的单独回答中概述。