我如何"跳过"在Cucumber中有标签的场景?

时间:2014-09-25 21:09:46

标签: ruby cucumber

我目前有一个包含大量Cucumber .feature文件的项目,其中许多方案已知被破坏。这些方案标有@broken,我们通过使用-t ~@broken执行黄瓜来避免运行它们。不幸的是,当我们检查黄瓜产量时,这使得这些情景实际上是不可见的。它们不会显示为已通过,失败或跳过。我想要的是将这些场景的计数包含在黄瓜输出中。他们应该显示为"跳过"测试,而不是完全没有显示。

我尝试了什么:

Before('@broken') do |scenario|
  pending
end

但是这引发了一个Cucumber::Pending异常,这个异常未被捕获,只是失败了。

我知道我可以写一个像这样的步骤:

Given /^PENDING/ do
  pending
end

然后浏览我的所有功能文件,并将此步骤添加到具有@broken标记的每个方案中。但这似乎很疯狂。它不符合" step"的语义。应该是(更不用说它需要对我的所有功能文件进行广泛的更改,而不是仅仅为标签添加一个钩子)。

这是我用标签做的事吗?

2 个答案:

答案 0 :(得分:2)

已编辑:

根据你的评论,你使用的是黄瓜-1.3.10。该版本无法实现。

在cucumber-jvm和cucumber-js中,它按预期工作,将场景标记为挂起,但令人惊讶的是,在ruby中,如果从Before(或After)挂钩抛出Pending异常,则会将场景标记为失败而不是悬而未决。

所以你的第一个建议是正确的。你应该使用标记钩子。

Before('@broken') do
 pending
end

但你必须更新你的Gemfile才能使用最新版本的黄瓜,此时此版本为2.0.0.beta.3。

source 'https://rubygems.org'
group :test do
  gem 'cucumber', '2.0.0.beta.3'
end

然后输出将按预期进行,标记为挂起(不跳过,因为没有跳过的方案,只传递/失败/挂起/未定义/跳过步骤和传递/失败/挂起/未定义场景)。

希望这有帮助。

答案 1 :(得分:2)

虽然这个问题很老,但它仍然是谷歌的最爱 - 所以为了未来访问者的利益,我正在分享这个。

我正在标记我的场景,然后在我的“step_definitions / hooks.rb”文件中,我有类似这样的内容:

Before('@proxy') do 
  skip_this_scenario unless proxy_running?
end

运行时,会优雅地跳过方案。

1 scenario (1 skipped)