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

BDD-Cucumber:是否可以在功能中只为一个场景禁用后台逻辑?,cucumber,bdd,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:

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

更新-添加示例:

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

我会完全删除背景条款——这是不必要的细节。如果没有它,你的场景会非常有意义

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

Solution 1。 您可以将唯一的场景放在没有背景或有自己背景的其他功能文件中

解决方案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

为什么不创建一个步骤定义来关闭该会话? 大概是这样的:

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

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

如果您有此需要,那么您已经确定了一个新功能。因此,与其尝试巧妙地使用cumber,不如采取更简单的方法,巧妙地命名您的特征

在您的示例中,场景
用户已登录
显然与注册无关,它属于不同的功能,例如

features
  - signup.feature
  - signed_up.feature
注册的其他名称可能是默认导航、首次登录等


想要为一个功能的不同部分提供不同的背景总是一个指标,表明你正在探索两种不同的行为。

@iafonov为什么?添加了一个片段,其中think很有用……这是正确的答案。背景适用于所有场景。如果后台的步骤不适用于功能中的所有场景,则这些步骤不属于后台。从问题中给出的例子来看,背景相当简单。我只是将这些步骤复制并粘贴到每个场景中。