Cucumber hooks可以区分标签吗

Can Cucumber hooks differentiate tags

Ruby 2. 我有一个 API 作为模块实现。它将 class 定义为

class Foo
  include API
end

但它也用于扩展另一个模块 通过

module Bar
  class << self
    include API
  end
end

我想测试 Foo 实例(例如Foo.new.methname)以及模块函数(例如Bar.methname)。

我的一个 Before 钩子将 @exemplar 定义为应应用的针对测试的默认对象。所以,问题是:我的 Before 钩子如何判断它应该使用 @exemplar = Bar 还是 @exemplar = Foo.new

或者,在稍微尝试一下标签之后,让我尝试一种不同的方法。如果场景标记为 @a@b,并且我有 Around('@a')Around('@b') 挂钩,并且用 -t @a 调用黄瓜两个 挂钩都被调用。钩子代码有没有办法告诉

  1. Around('...')参数是什么('...'的值),以及
  2. 正在应用的集合中实际有哪些标签?

Around('@b') 钩子有什么方法可以告诉它它是针对 @b 标记表达式, @b 不在 正在应用的标签列表中?

谢谢!

如果您的 feature/scenario 已标记 ...

@some_tag
Feature: My feature

  @some_other_tag
  Scenario: My scenario
    Given ......

当给定的钩子被...应用时,您可以检索标签名称列表。

Around('@some_tag') do |scenario|
  tags = scenario.source_tag_names
end

这将是 return 数组中的标签名称列表

$ tags
=> ['@some_tag', '@some_other_tag']

执行场景时调用的标签位于 Cucumber::Cli::Options 对象中。我找到了找回它的方法,但是 post 它有点伤害我的灵魂 ...

如果你运行上面的 cucumber -t @some_tag,你可以通过执行以下操作在你的钩子中获取标签......(虽然,我确定必须有更好的方法)

Around('@some_tag') do |scenario|
  tags = scenario.source_tag_names
  options = Array.new puts
  executed_tag = options.last.config.tag_expressions
end

$ tags
=> ['@some_tag', '@some_other_tag']
$ executed_tag
=> ['@some_tag']

希望这对您有所帮助。