如何提前退出Ruby Cucumber步骤定义?

4

我不知道为什么这么难。我尝试了几种方法,但是由于某些原因,这段 Ruby Cucumber 代码要么继续执行块中的下一段代码,要么出现类似“unexpected return (LocalJumpError)”的错误。这是一个显而易见的问题吗?我找不到答案?

我有一种解决方法,就是将所有代码都包装在“if condition == false”的条件语句中,但是否有更好的方法呢?

When(/^I create scenarios$/) do
   if condition == true
     #exit, return, next, break ????
   end
   #code i don't want to execute if condition matches
end

2
一个“退出”cucumber步骤的方法是使用异常或流程控制。你有一个足够的解决方法。如果你想结束执行,你应该将条件转换为期望:expect(condition).to be_true - Derrell Durrett
你试过使用 break 吗? - max pleaner
1
break 给出相同的问题。如下所述,next 似乎会给出所需的结果。 - Owen B
3个回答

8
我相信您想通过使用“next”提前退出该块。
next if condition

0
你所遇到的代码问题是,你不想执行的代码不在 if 块中。
按照你目前的写法,它会检查 if 条件,然后根据条件执行。接着,它会移动到下一行代码,也就是你不想运行的代码。
我的建议是尝试这样做:
When(/^I create scenarios$/) do
   if condition == true
   else
     #code i don't want to execute if condition matches
   end
end

这里会发生什么,它将检查if条件,如果为真,则代码将什么也不做,但跳过else步骤,因为它满足了if条件。当它检查if条件时,如果返回false,则它将继续执行else步骤,并执行该代码。

我不能保证这是编写此代码的最佳方法,但这很简单,应该足以解决问题。


-1

因为如果条件为真,您不希望发生任何事情,所以我建议在步骤定义中使用unless

When(/^I create scenarios$/) do
  unless condition == true
     #code you want to execute when the condition is false
  end
end

如果condition == true,流程将直接移动到下一步。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接