将.feature文件中的变量作为数组参数传递

时间:2012-02-13 23:03:11

标签: ruby ruby-on-rails-3 cucumber

我正在尝试将参数从.feature文件(黄瓜)传递到.rb文件中的方法调用 继承人我所拥有的: 专题文件

 When I set something to blah

上述特征文件的步骤定义:

 When /^I set something to (.+)$/ do |value|
 methodcall(["#{value}"]))
 end

单独的.rb文件中的方法

    def methodcall (a=[],b=[],c=[])
    a.each {|x| 
     do something with x
     }
        b.each {|y| 
     do something with y
     }
        c.each {|z| 
     do something with z
     }
     ...
    end

当我在.feature文件中只提供一个参数时,它工作正常。我希望它能为每个数组的一个值工作(虽然没试过)

但我想要做的就是写一下这样的特色文件

       And I set something to "blah,blah1,blah2" and somethingelse to "blah4,blah5" and otherthings to "blah6, blah7"

对于上述,步骤定义看起来像

          When /^I set something to (.+) and somethingelse to (.+) and            
          and otherthings to (.+)$/ do |value, value1, value2|
          methodcall(["#{value}"], ["#{value1}"], ["#{value2}"]))
          end

并通过上面的步骤定义,将value,value1,value2中的值传递给对应于a = [],b = [],c = []的参数,并调用methodcall()方法。有人可以帮忙..谢谢。

1 个答案:

答案 0 :(得分:3)

在您的代码中

methodcall(["#{value}"])

您正在获取字符串值并将其转换为数组的第一个元素,然后将其传递给methodcall()。

我相信你真正想做的是

methodcall(value.split(','))

这将取你的价值,用逗号分解并将每一个作为数组的元素。

为了说明你的例子,假设methodcall()是:

def methodcall (a=[],b=[],c=[])
    a.each {|x| puts x }
    b.each {|y| puts y }
    c.each {|z| puts z }
end

然后

value = "blah,blah1,blah2"
methodcall(["#{value}"])
#=> blah,blah1,blah2

在哪里

value = "blah,blah1,blah2"
methodcall(value.split(,))
#=> blah
#=> blah1
#=> blah2