【问题标题】:How to make value from one step available to other steps in cucumber如何使黄瓜中的一个步骤的价值可用于其他步骤
【发布时间】:2014-01-28 04:40:11
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您需要这种级别的粒度和特异性贯穿您的测试,那么您可能将黄瓜用于错误的事情
  • 你会推荐什么类型的工具?
  • 您能否提供一个您需要解决的实际/实际黄瓜步骤。例如,您希望有多少内容可供后续步骤使用?
  • @fruit = {}替换为:@fruit ||= {}

标签: ruby cucumber page-object-gem


【解决方案1】:

您可以将@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 

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

【讨论】:

  • 谢谢贾斯汀。我可以在模块或基本页面中初始化 @basket 吗?还是必须在步骤中完成?
  • 是的,你可以。但是,我不确定这是否有意义或有益。
  • 谢谢贾斯汀。我会试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多