在我的场景中,我需要在其他步骤中使用的第一步或第二步设置数据。步骤看起来像这样:
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
更改此设置以使其继续工作的最佳方式是什么?
答案 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
当然,您需要调整其他代码以考虑包含多种水果类型的哈希值。