在字符串之外的Ruby插值

时间:2016-04-21 11:05:34

标签: ruby cucumber capybara

我正在使用不同的用户凭据运行一些测试。每个都会产生相同的错误信息,但我只需要确认它是否有效。

我创建了以下内容:

def login_mrjones
  fill_in('forname', with: 'Steve')
  fill_in('surname', with: 'Jones')
  etc etc
end

我为戴维斯先生和其他一些名字做了另一件事。在编写我的步骤定义时,我希望使用以下内容,变量名称为mrjones或mrdavies:

When(/^I log in as "([^"]*)"$/) do |name|
   login_#{name}
end

我希望使用插值来完成使其成为通用的方法,这一行会调用我拥有的任何login_name方法。

如果不是字符串,插值似乎不起作用。有什么方法可以实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

你可以做到  eval("login_#{name}")

Stefan和JörgWMittag指出,您应该更喜欢public_send Klass.public_send("login_#{name}.to_s")

或更好。为什么不添加另一个辅助方法?

def login(name)
  case name
  when 'foo'
    login_foo
  ....
  end
end