Gherkin / Cucumber是否有“for each”或等效语法?

时间:2015-04-01 19:10:24

标签: cucumber gherkin

Gherkin是否有相同的“每个”声明?在以下场景中,我正在测试的页面有多个日期字段,我想在其上运行相同的测试示例。

以下是我想要建模的方案。

场景大纲:修改日期控件的精度值

Given I have just added a record

 When I select <precision>

  And I select <value>

 Then <date> displays in the <date type> field

示例:

  | date type | precision | value           | date                     |

  | Date 1    | Unknown   | N/A             | "Unknown"                | 

  | Date 1    | Year      | <current year>  | <current year>           |

  | Date 1    | Month     | <current month> | <current month, year>    |

  | Date 1    | Day       | <current day>   | <current month/day/year> | 

  | Date 2    | Unknown   | N/A             | "Unknown"                | 

  | Date 2    | Year      | <current year>  | <current year>           | 

  | Date 2    | Month     | <current month> | <current month, year>    | 

  | Date 2    | Day       | <current day>   | <current month/day/year> | 

假设同一页面上有5个日期类型字段。似乎没有必要在表中复制/修改12行以覆盖日期3 - 日期5.这就是为什么我想知道是否存在“for each”等价物,以便我可以为每个日期类型执行相同的示例必须在Examples表中明确显示。或者也许我可以采用不同的方式构建场景?

感谢您提供的任何帮助!

2 个答案:

答案 0 :(得分:5)

不,黄瓜的设计并没有考虑到循环。 Cucumber的范围是允许从用户角度定义应用程序预期。而且由于真正的用户不会“循环”,所以用黄瓜实现它是没有意义的
从程序上讲,可以做的是编写一个程序,为你的应用程序中的每个组合生成相同的黄瓜脚本。

答案 1 :(得分:2)

Cucumber不是为支持多列迭代而设计的,但它可以使其工作。在这里,我想尝试路径和角色的每个组合:

  Scenario: cannot access paths
    When I access "path" as "role" then I should see an error
      | /path1 | user1 |
      | /path2 | user2 |
      | /path3 | user3 |

When(/^I access "path" as "role" then I should see an error$/) do |table|
  paths, roles = table.raw.transpose.map { |e| e.reject(&:blank?) }
  roles.each do |role|
    step "I am logged in as #{role}"
    paths.each do |path|
      p "#{role} user visiting #{path}"
      visit path
      step 'I should see the privileges error'
    end
  end
end