12

是否可以将一个功能重用为另一个功能的“给定”?

还是我在尝试做一些我不应该尝试做的事情

基本上我的功能看起来像:

Scenario: Creating a basic account with valid details (happy path)
  Given I am on the "signup" page
  And I enter all the right details #this is shortened of about 20 steps for your reading ease
  When I press the button labelled "Sign up"
  Then I should see the text "Thanks for signing up"
  And I should have an email from "confirmation@mysite.com" titled "Confirm your account Michael"
  And the database should contain a record for the user marked as unconfirmed

Scenario: Confirming account via email
  Given I have created a basic account
  When I open the confirmation email and visit the url to confirm the account
  Then I should be logged in
  And the database should contain a record for the user makred as confirmed

我在每个功能之后清除我的数据库,因为它们都应该能够单独运行......

我会以错误的方式解决这个问题吗?

谢谢

4

3 回答 3

13

问题

您实际尝试的是重用场景。Cucumber不再支持此功能。

除了这种方法的其他问题之外,您的测试将更慢且相互依赖,因为您将:

  1. 通过浏览器推动帐户创建,以及
  2. 使您的所有测试都依赖于帐户创建测试的通过。

不要那样做。

黄瓜之道

通常,您应该编写测试以独立工作,尽管您当然可以重用步骤定义。因此,在一般情况下,您可能希望添加共享步骤,例如:

  1. 鉴于用户帐户“测试用户”不存在
  2. 鉴于用户帐户“测试用户”存在

然后可以根据需要将其包含在您的场景中。这种方法的好处是这些步骤可以以编程方式创建或删除用户。

或者,如果您的大部分测试将在现有帐户上进行,请设置默认数据集,并使用正确的用户固定装置。对于您将测试帐户创建的有限子集,只需添加一个驱动用户删除的场景背景

于 2012-05-30T08:59:04.727 回答
1

如果您使用的是 Javascript,我创建了一个名为reuse-cucumber-scenarios的包,用于调用场景:

Given the scenario "@scenario_tag"

.

Given the scenario "@scenario_tag" with parameters
"""
{
  "1": ["step1_param1", "step1_param2"],
  "2": ["step2_param1", "step2_param2", "step2_param3"],
  "3": ["step3_param1", "step3_param2", "step3_param3"],
}
"""

或创建小黄瓜变量...

Given the variable "$variable_name" is equal to
"""
#JSON object
"""

或创建场景函数并通过执行来调用它们......

Given the scenario "@$scenario_function_tag" where variable "$variable_name" is "value_to_replace"

和更多...

于 2018-03-25T04:57:22.290 回答
0

目前,您可以使用以下方法:

Background:
  Given Some common setup
  And Some more setup

Scenario: one
  When setup1
  Then something1

Scenario: two 
  When setup2
  Then something2
于 2021-04-07T16:22:02.937 回答