将ParameterType与表数据一起使用?

时间:2019-05-02 00:41:04

标签: cucumber

我在Ruby中使用Cucumber。

我有一个ParameterType,它可以识别货币值并将其解析为BigDecimal,例如“考虑到成本是25.50美元。”

我想对表格做类似的事情,即与模式匹配的任何东西都应该自动转换,例如:

Given these products:
  | item | cost   |
  | foo  | $10.50 |
  | bar  | $5.25  |

我在文档中找不到任何有关此的内容。有可能吗?

编辑:Step Argument Transforms似乎曾经对此提供支持,但是在黄瓜3中已将其删除:

  

通过以“ table:”为前缀的列标题的逗号分隔列表来匹配表转换

2 个答案:

答案 0 :(得分:0)

在步骤定义中,确保遍历表中的所有项目并调用步骤Given the cost is XXX

这是步骤def中的示例逻辑

And(/^Given these products:$/) do |table|
    # iterate through table
    table.hashes.each do |product|
       # you can get the product details here
       item = product['item']
       cost = product['cost']
       # you can use the item  if you want to select or any operation
       # calling the Given the cost is xx step (here calling the step that already you implemented)
       step("Given the cost is #{cost}")
    end
end

答案 1 :(得分:0)

2021 年 8 月

根据 this Github Issue: 在他们用 ParameterTypes 替换 Transforms 之后,不再可能转换数据表。 “官方”解决方法似乎是创建一个辅助方法:(原始 #comment):

module Helpers
  def custom_transform(table)
    table.map_headers! { |header| header.downcase.to_sym }
    table.hashes.each do |row|
      # ...
    end
    table
  end
end

World(Helpers)

然后,在您的步骤定义中:

Given /a step that takes a table:/ do |table|
  expand_placeholders_in table
  # ...
end