如何在Cucumber Ruby中获取Scenario Outline示例值以生成有效日志?
问题描述
我想获取Scenario Outline示例的值来生成有意义的日志,已经成功获取场景名称用于日志,但获取Scenario Outline示例值时出现错误,报错信息:
undefined method `scenario_outline' for #<Cucumber::Core::Test::Case:
我的Before钩子代码如下:
Before do |scenario| if scenario.respond_to?(:scenario_outline) && scenario.scenario_outline message = "Running example: #{scenario.scenario_outline.name} - #{scenario.name}" else message = "Running scenario: #{scenario.name}" end end
解决方案
问题出在Cucumber版本的API变更上,Cucumber::Core::Test::Case对象没有scenario_outline方法,可通过以下两种方式修复:
方法1:通过test_case关联获取Scenario Outline
新版本Cucumber中,需通过scenario.test_case访问关联的Scenario Outline:
Before do |scenario| if scenario.test_case.respond_to?(:scenario_outline) && scenario.test_case.scenario_outline outline_name = scenario.test_case.scenario_outline.name message = "Running example: #{outline_name} - #{scenario.name}" else message = "Running scenario: #{scenario.name}" end end
方法2:通过source属性判断并提取信息
若上述方法不适用,可通过场景的source属性判断是否为Scenario Outline的示例:
Before do |scenario| if scenario.source.respond_to?(:scenario_outline) outline_name = scenario.source.scenario_outline.name message = "Running example: #{outline_name} - #{scenario.name}" else message = "Running scenario: #{scenario.name}" end end
核心原因是不同版本Cucumber对测试场景对象的结构定义不同,旧版本的scenario_outline方法被移到了关联的test_case或source对象下,需要调整访问路径。
内容的提问来源于stack exchange,提问作者RR31
相关产品推荐
相关产品推荐

