Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从步骤中提取场景大纲(或读取标记)_Ruby_Cucumber - Fatal编程技术网

Ruby 从步骤中提取场景大纲(或读取标记)

Ruby 从步骤中提取场景大纲(或读取标记),ruby,cucumber,Ruby,Cucumber,如果我有一个这样开始的场景: @my-tag Scenario Outline: Admin user changes email Given I register a random email address 是否可以读取单个步骤定义中的场景大纲文本或@my tag?例如,在我注册了一个随机电子邮件地址步骤中,如果调试信息在给定场景或标记值下运行,我希望打印调试信息 您不能直接从步骤定义中访问该信息。如果您需要这些信息,则必须在挂接前捕获这些信息 黄瓜v3+ 下面的

如果我有一个这样开始的场景:

  @my-tag

  Scenario Outline:
  Admin user changes email

    Given I register a random email address


是否可以读取单个步骤定义中的场景大纲文本或
@my tag
?例如,在
我注册了一个随机电子邮件地址
步骤中,如果调试信息在给定场景或标记值下运行,我希望打印调试信息

您不能直接从步骤定义中访问该信息。如果您需要这些信息,则必须在挂接前捕获这些信息

黄瓜v3+

下面的before钩子将捕获功能名称、场景/大纲名称和标记列表。请注意,此解决方案适用于Cucumber v3.0+。有关早期版本,请参见答案的结尾

Before do |scenario|
  # Feature name
  @feature_name = scenario.feature.name

  # Scenario name
  @scenario_name = scenario.name

  # Tags (as an array)
  @scenario_tags = scenario.source_tag_names
end
例如,要素文件:

@feature_tag
Feature: Feature description

  @regular_scenario_tag
  Scenario: Scenario description
    Given scenario details

  @outline_tag
  Scenario Outline: Outline description
    Given scenario details
    Examples:
      |num_1  | num_2  | result |
      | 1        |   1       |   2     |
步骤定义为:

Given /scenario details/ do
     p @feature_name
     p @scenario_name
     p @scenario_tags
end
将给出以下结果:

"Feature description"
"Scenario description"
["@feature_tag", "@regular_scenario_tag"]

"Feature description"
"Outline description, Examples (#1)"
["@feature_tag", "@outline_tag"]
然后,您可以检查@scenario\u名称或@scenario\u标记以了解您的条件逻辑

黄瓜v2

对于Cucumber v2,所需的挂钩更为复杂:

Before do |scenario|
  # Feature name
  case scenario
    when Cucumber::Ast::Scenario
      @feature_name = scenario.feature.name
    when Cucumber::Ast::OutlineTable::ExampleRow
      @feature_name = scenario.scenario_outline.feature.name
  end

   # Scenario name
  case scenario
    when Cucumber::Ast::Scenario
      @scenario_name = scenario.name
    when Cucumber::Ast::OutlineTable::ExampleRow
      @scenario_name = scenario.scenario_outline.name
   end

  # Tags (as an array)
  @scenario_tags = scenario.source_tag_names
end
输出略有不同:

"Feature description"
"Scenario description"
["@regular_scenario_tag", "@feature_tag"]

"Feature description"
"Outline description"
["@outline_tag", "@feature_tag"]

只需添加:scenario.feature.source_tag_name将仅返回[“@feature_tag”]
未初始化常量Cucumber::Ast
。Ast已被弃用,无法跟踪如何替换它。@MichaelJohnston,Cucumber v3的答案已更新。希望有帮助。问得好,谢谢