watir,cucumber,使用字符串选择变量,但不使用case/when

watir,cucumber,使用字符串选择变量,但不使用case/when,cucumber,watir,Cucumber,Watir,我有这样一个黄瓜步骤(它不起作用,但它是一个概念): 在另一个文件paths.rb中,我有一个硬编码URL: $google_url = http://www.google.com 我希望能够通过如下操作选择该URL: And I navigate to this url 'google' 目前,我还没有找到一种方法来选择变量$google_url的“真实内容”。有什么想法吗?解决方案-使用eval(坏主意) 最快、最直接的解决方案是使用eval执行字符串以获取变量。然而,人们经常认为eva

我有这样一个黄瓜步骤(它不起作用,但它是一个概念):

在另一个文件paths.rb中,我有一个硬编码URL:

$google_url = http://www.google.com
我希望能够通过如下操作选择该URL:

And I navigate to this url 'google'

目前,我还没有找到一种方法来选择变量$google_url的“真实内容”。有什么想法吗?

解决方案-使用eval(坏主意)

最快、最直接的解决方案是使用
eval
执行字符串以获取变量。然而,人们经常认为
eval
是个坏主意

And (/^I navigate to this url '(.*?)'$/) do |web|
   url = eval('$' + web + '_url')
   @browser.goto url
end
解决方案-创建模块并使用send

我认为更好的办法是创建一个包含所有路径常量的模块。这会更好,因为(1)可以防止使用许多全局变量污染空间,(2)使用
send
eval
更安全

在paths.rb中,您可以使用可以返回不同URL的模块替换全局变量:

module Paths
    class << self
        def google_url()
            'http://www.google.com'
        end
    end
end

我喜欢“评估”围裙。这就是我要找的。
module Paths
    class << self
        def google_url()
            'http://www.google.com'
        end
    end
end
And (/^I navigate to this url '(.*?)'$/) do |web|
   url = Paths.send(web + '_url')
   @browser.goto url
end