如何从黄瓜的其他步骤中获得一步的价值

时间:2014-01-26 20:38:57

标签: ruby cucumber page-object-gem

在我的场景中,我需要在其他步骤中使用的第一步或第二步设置数据。步骤看起来像这样:

Given I add 5 apples
And I add 3 bananas

我需要保存每种水果的种类和数量,以便我可以在后续步骤中验证一些内容,如定价,小计,总计等。最初我使用了实例变量,因为场景很简单。他们只包括一种水果类型和数量。然而,由于场景包含更多水果类型和数量,我需要弄清楚如何保存它以使其可用于后续步骤。当我们每个方案只使用一个水果和数量时,我的步骤是:

Given(/^I add (\d+) "([^\"]*)"$/) do |quantity, type|
  @fruit = {}
  @fruit = [type => quantity]
  #rest of code here
end

更改此设置以使其继续工作的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

你可以使@fruit成为哈希,其中键是水果类型,值是每个水果的数量。例如,

@fruit = {:apples => 5, :bananas => 3}

代表5个苹果和3个香蕉。

您可以使用Cucumber步骤轻松完成此操作。请注意,为了清楚起见,我将@fruit重命名为@basket

Given(/^I add (\d+) "([^\"]*)"$/) do |quantity, type|
  @basket ||= {}
  @basket[type] = quantity
  #rest of code here
end 

如果您想要添加更多相同水果类型的东西,例如:

Given I add 5 apples
And I add 3 apples

上述步骤只会保留最后一个数量 - 即篮子中只有3个苹果。您可以更改步骤以对数量求和,以便最终获得8个苹果:

Given(/^I add (\d+) "([^\"]*)"$/) do |quantity, type|
  add_fruit = {type => quantity}
  @basket ||= {}
  @basket = @basket.merge(add_fruit){ |key, oldval, newval|  oldval + newval }
  #rest of code here
end 

当然,您需要调整其他代码以考虑包含多种水果类型的哈希值。