9

我有这样的场景:

  1. 鉴于我去这个页面
  2. 当我输入黄瓜时
  3. 我点击
  4. 然后我应该看到文字
  5. 我不应该看到这条线

如果我运行这个场景,它将执行所有 5 个步骤。但我想跳过第 4 步(然后我应该看到文本)并执行第 5 步。

请给我你的建议。提前致谢。:)

4

2 回答 2

14

TL; DR - 不要这样做 - 你(可能)弄错了。而且你不能(容易)做到这一点。正如 Aslak 所写(Cucumber 的主要创造者之一):

一个步骤可以产生以下结果:

  • 未定义(没有匹配的 stepdef)
  • 待处理(抛出 PendingException 的匹配 stepdef)
  • 通过(不抛出任何东西的匹配 stepdef)
  • 失败(一个匹配的 stepdef 抛出一个不是 PendingException 的异常)
  • 已跳过(引发任何异常(未定义、待处理或失败)的步骤之后的步骤)

您要求的是一种新的结果-被忽略。它可以通过抛出 IgnoredException 来实现。这意味着 skipped 必须更改为:(引发任何异常(未定义、未决或失败)的步骤之后的步骤 - 除非异常是 IgnoredException)

我不确定我喜欢这个。这听起来比它需要的更复杂。您已经掌握了某些问题的必要信息 - 您的步骤将失败或待处理。我看不到继续执行以下步骤的价值。您仍然必须实施失败/待定步骤。

只要提醒你“这里有工作要做”,我认为让 Cucumber 告诉你需要做什么样的工作并不容易......

阿斯拉克

整个讨论在这里:http ://comments.gmane.org/gmane.comp.programming.tools.cucumber/10146

于 2012-12-21T10:29:48.237 回答
6

I have had to skip steps conditionally based on environments. I used next to skip steps. Here is an example on how to do what you wanted.

Then /^I should see the text/$ do
    next if @environment == 'no text'

    ...
       <The actual step definition>
    ...
end
于 2014-06-12T18:27:33.730 回答