0

在我的场景中,我需要在其他步骤中使用的第一步或两组数据。步骤如下所示:

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

改变它以使其继续工作的最佳方法是什么?

4

1 回答 1

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 

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

于 2014-01-27T20:40:11.900 回答