我正在使用不同的用户凭据运行一些测试。每个都会产生相同的错误信息,但我只需要确认它是否有效。
我创建了以下内容:
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方法。
如果不是字符串,插值似乎不起作用。有什么方法可以实现这个目标吗?
答案 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