BDD - Cucumber:是否可以仅为功能中的一个场景禁用后台逻辑?

时间:2012-03-27 20:19:01

标签: cucumber bdd

在功能文件中有背景和几个场景,但现在需要一个与不必运行后台逻辑的相同功能相关的场景,是否可以仅针对场景禁用?

更新 - 添加示例:

Feature: Sign Up

  In order to access to protected parts of site
  A user
  Should sign up

  Background:
     Given I am on sign up page
     And I am not logged in

  Scenario: User sign up succesfully
    When I sign up with valid fields
    Then I should view dashboard page 

  Scenario: User altredy sign up
    When I sign up with altredy registred user e-mail
    Then I should view altredy sign up message and link to forgot password page

  Scenario: User try to sign up with missing/wrong data
    When I will try to sign up with missing/wrong data
    Then I should error message

  Scenario: User altredy sign in
    #here disable background
    Given I am logged in
    When I am on sign up page
    Then i should be redirect to dashboard page

4 个答案:

答案 0 :(得分:1)

我会完全摆脱背景条款 - 这是不必要的细节。没有它,你的场景就会很有意义。

您可以访问注册页面,并验证用户是否已登录,这是“当我使用有效字段注册时”步骤定义的一部分。

答案 1 :(得分:0)

解决方案1。

你可以只将Scenario放在其他功能文件中,那里没有背景或者它有自己的背景

解决方案2.

从要素文件中删除背景,然后将其逻辑放在步骤定义上,如

Given 'I am on sign up page' do
    some code here
end

Given 'I am not logged in' do
    some code here
end

然后在每个第一步

Given 'I sign up with valid fields' do
    step 'I am on sign up page'
    step 'I am not logged in'
    the rest of your code for this step
end

Given 'I sign up with altredy registred user e-mail' do
    step 'I am on sign up page'
    step 'I am not logged in'
    the rest of your code for this step
end

Given 'I will try to sign up with missing/wrong data' do
    step 'I am on sign up page'
    step 'I am not logged in'
    the rest of your code for this step
end

虽然你会重复至少3次,但这并不漂亮。

解决方案3。

您可以摆脱该场景并在第一个场景中粘贴它的步骤,例如

Scenario: User sign up succesfully
    When I sign up with valid fields
    Then I should view dashboard page    #this is your Given I am logged in step
    When I am on sign up page
    Then i should be redirect to dashboard page

答案 2 :(得分:0)

为什么不创建关闭该会话的步骤定义? 像这样的东西:

 Then(/^I close the browser$/) do
   page.driver.quit
 end

然后,您可以在后续步骤中执行任何操作

答案 3 :(得分:0)

如果有此需要,则可以确定一个新功能。因此,与其尝试聪明地使用黄瓜,不如选择聪明的命名功能。

在您的示例中,场景User already signed in显然与注册无关,它属于另一个功能,例如

features
  - signup.feature
  - signed_up.feature

signed_up的其他名称可能是default_navigation,first_sign_in等,等等。

想为功能的不同部分提供不同的背景,始终表明您正在探索两种不同的行为。