是否有 "for each" 或 Gherkin/Cucumber 的等效语法?

Is there a "for each" or equivalent syntax for Gherkin/Cucumber?

Gherkin 是否有等效的 "for each" 语句?在以下场景中,我正在测试的页面有多个日期字段,我想在这些字段上 运行 相同的测试示例。

这是我想要建模的场景。

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

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个日期类型字段。似乎没有必要在 table 中再 copy/psate 12 行来涵盖日期 3 - 日期 5。这就是为什么我想知道是否有 "for each" 等价物以便我可以执行每个日期类型的示例相同,而不必在示例 table 中明确显示。或者我可以用不同的方式构建场景?

感谢您提供的任何帮助!

不,黄瓜在设计时并未考虑循环。 Cucumber 的范围是允许从用户的角度定义应用程序预期。由于真正的用户不会 "loop",因此在 Cucumber 中实现它没有意义。

从编程的角度来说,可以做的是编写一个程序,为应用程序中的每个组合生成相同的黄瓜脚本。

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