【问题标题】:How can I access the scenario and example names in Cucumber?如何访问 Cucumber 中的场景和示例名称?
【发布时间】:2009-03-19 23:14:59
【问题描述】:

我正在使用 cucumber 生成可以由工具或人执行的测试脚本......所以不是标准用途。

但是我想将场景和示例名称传递给我的输出。

这可能吗?

【问题讨论】:

  • 我希望解决方案类似于之前做 |scenario|将场景名称结束,但它没有名称方法,并且场景对象在我的情况下似乎是 Cucumber::Ast::OutlineTable::ExampleCells,因为我正在使用场景大纲

标签: cucumber


【解决方案1】:

找到了..(在 Tim Walker 的帮助下)

Before do |scenario|
 puts "Before Scenario: #{scenario.to_sexp[2]}"
 .
 .
 .
end

您的 SExpression 可能会有所不同,因此值得做一个 scenario.to_sexp.inspect 来看看那棵树是什么。

Aslak 热衷于避免在他的类中公开属性(这是我碰巧同意的决定,所以我很乐意解决这个问题)。

【讨论】:

  • scenario.name 似乎在当前版本的 Cucumber 上运行良好。
【解决方案2】:

一个更严肃的答案(或至少是建议):利用 ruby​​ 的反射来尝试找到您正在寻找的东西。抓住可能的对象,找出他们有什么方法,看看你能不能找到它。例如:

File.open('happy_hunting.log','a') { |f|
    f.print "Scenario supports: #{(scenario.methods - Object.methods).inspect}\n"
    }

然后重复它以找出什么在哪里。

另一个建议,看源码。

【讨论】:

  • 这不起作用,因为场景中没有可用的场景对象-除非您使用 Before 块捕获它,如 Nigel 的回答所示。
【解决方案3】:

我做了一些草率的事情。由于我仅将此信息用于调试,因此暂时可以使用,直到我找到更好的东西。

@Before
public void printTestInfoBeforeScenario(Scenario scenario) {
    LOGGER.info("Upcoming Test: "+scenario.getSourceTagNames());
}

@After
public void printTestInfoAfterScenario(Scenario scenario) {
    LOGGER.info("Test Complete: " + scenario.getSourceTagNames() + " Status: " + scenario.getStatus());
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多