Ruby on rails 干燥路径。rb

Ruby on rails 干燥路径。rb,ruby-on-rails,cucumber,dry,Ruby On Rails,Cucumber,Dry,我是cucumber的新手,我想问一下如何去掉这段代码(它不包含错误): 我试着像这样使用regexp when /^the (.+) page$/ $1.to_s+'s_path' 但显然这是错误的。提前谢谢 解决方案(基于答复): when /^the (.+) page$/ send("#{$1}s_path") 您可以添加: 功能/支持/路径.rb module PathHelpers def path_to(page_name) case page_name

我是cucumber的新手,我想问一下如何去掉这段代码(它不包含错误):

我试着像这样使用regexp

when /^the (.+) page$/
  $1.to_s+'s_path'
但显然这是错误的。提前谢谢

解决方案(基于答复):

when /^the (.+) page$/ 
 send("#{$1}s_path")
您可以添加:

功能/支持/路径.rb

module PathHelpers
  def path_to(page_name)
    case page_name
    when /user/i
      users_path
    when /review/i
      reviews_path
    when /home/i
      root_path
    #add custom here
    else
      raise "Can't find mapping from \"#{page_name}\" to a path."
    end
  end
end

World(PathHelpers)
并称之为:

when /^the (.+) page$/ do |page|
  visit path_to(page)
end
这应该起作用:

When /^the "(.+)" page$/ do |destination|
  send("#{destination}s_path")
end

您定义了一个助手,并且有一个地方需要更改行为,添加新路径,而无需查看代码中的任何其他地方。我想是干的。DRY不要说写更少的代码行,而是写一个可以在一个地方轻松修改的代码。我通过呼叫word更新了答案,已经有一段时间没有使用cucumber了,但可能需要它。谢谢!我希望您的版本能够工作,尽管我刚才添加的解决方案似乎更简洁。谢谢你的建议!它看起来更好,但不幸的是不起作用。感谢您建议“发送”。在这个版本中,它给出了一个语法错误。当我在| destination |之前插入do时,我得到了
语法错误,意外的关键字_do,应为关键字_then或','或';'或“\n”当/^(.+)页面$/do | destination |
时。然后我用Then替换了do,得到了
语法错误,意外的“|”
。为了进一步使用您的代码,我在(.+)页面$/send(“{1}s_路径”)时做了如下更改,使其工作正常。非常感谢!更改为包括省略的
do
和引号。奇怪的是,这种语法对你不起作用。我不能争论哪种解决方案“更短”,但我个人认为,这一种更像是一种干巴巴的技术。想象一下,在测试中有一个输入错误“当revievs路径”时。从现在起一个月内,你要花多长时间才能找到它??秒,带有“找不到从revievs到路径的映射。”??试着把它转换成成本。你是对的,但是这样想,我就没有必要更改我开始使用的代码了。我说得对吗?
When /^the "(.+)" page$/ do |destination|
  send("#{destination}s_path")
end