能否在Gherkin中写一个跨越多行的步骤?

43

我对Gherkin语言很陌生,这似乎是一个非常基础的问题,但我找不到答案。

我知道在Gherkin中可以编写多行步骤参数,像这样:

Given a blog post named "Random" with Markdown body
  """
  Some Title, Eh?
  ==============
  Here is the first paragraph of my blog post. Lorem ipsum dolor sit amet,
  consectetur adipiscing elit.
  """

我的问题是关于在多行上编写单个步骤,类似于这样:

Given that Gherkin language allows me to write my step definitions \
   on multiple lines
Then my test cases would be easier to read :)
在上面的示例中,我使用 '\' 作为换行符。顺便说一下,我尝试了上面的示例,但遇到了解析器错误。

6
我认为这个问题比下面的人们所认为的要好。我是一个简洁的作者,经常会用尽空间。 - Ryan Shillington
同意。多行文本将是一种不错的可读性方式,用于构建我的某些behave/gherkin步骤。 - Mary Bergman
在一次性指定多个设置时,使用表格通常是一个不错的选择。这样可以支持各种设置组合,而无需产生步骤爆炸(大量新步骤)。"And"或"But"可能管用,但当设置需要成为一个原子单元时则不能。 - Mary Bergman
2个回答

32

是的,我们可以使用三重双引号("" ")在多行上编写gherkin步骤。Gherkin将三重双引号识别为多行字符串的分界符,并将其传递给步骤定义。您在三重双引号之间编写的任何内容都将作为单个字符串传递给步骤定义。

例如,在我的当前capybara项目中,我已经按照下面所示的方式编写了多行gherkin步骤:

Scenario: Some test scenario
  Given Bob is on "www.abc.com"
  When Bob creates team "Test Team"
  Then Bob sees message:
      """
      As the Team Captain you will be responsible for paying for the team after 
      registration closes. You will be emailed instructions at the close of 
      registration.
      """
And Bob clicks "Next" button

多行 Gherkins 步骤的步骤定义:

And(/^(\S*) sees message:$/) do |user, message|
  page.should have_content(message)
end
在这里,我使用原样传递的内容。您还可以根据需要拆分您的内容并使用。 有关更多信息,请参见下面提到的链接: http://asymmetrical-view.com/2011/06/02/cucumber-gherkin-and-multiline-arguments.html 希望这能有所帮助 :)

25
这是好的信息,但并不是问题的答案。问题本身已经提供了相同的信息,因为我知道可以在多行上编写参数。问题实际上是关于在多行上编写没有参数的单个长Gherkin步骤的写法。Thomas的答案提供了至少一种解决方法,并且也是一个好的做法。这就是为什么我将其标记为正确答案(至少暂时如此 :))。 - Dragan Nikolic
不过这正是我正在寻找的 :) 非常感谢 @sarabjit-singh - chriszo111

-7

您尝试并获得了一个解析错误。我认为将长行写在一行上没有给您带来解析错误。因此,您已经回答了自己的问题。

我想建议您问问自己为什么要让这些行变得很长。所需的行为,它真的需要那么多细节,以至于行变得非常长吗?

通常可以通过重新构造句子来更简洁地表达自己。也可能使用Gherkin关键字And或But来分割长句。


3
谢谢Thomas,我接受这个回答。虽然不可能在多行中写出单个步骤,但是可以使用“而且”或“但是”来达到同样的目的。 - Dragan Nikolic

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