При написании BDD-функции, следует ли мне поместить предыдущее взаимодействие пользователя в шаг Given или When?

Я пытаюсь написать требования к многоэтапному бизнес-процессу (с помощью мастера). У меня есть много сценариев, в которых взаимодействие пользователя с одним экраном будет изменять, разрешено ли вам выбирать опции на другом экране.

Например (я скрыл реальный бизнес, но процесс и форма шагов почти идентичны):

Feature: Personal Diagnostic Search Filter
  In order to select a Technician who offers Personal Diagnostics,
    when I've asked for a Personal Diagnostic
  As a Business Customer
  I want to limit my search to Technicians who offer Personal Diagnostics

  Background:
    Given a Business named "Big Al's Auto Supply"
      And a Customer named "Bob Test" at the "Big Al's Auto Supply" Business
      And an Account named "bobtest@testbusiness.com" owned by "Bob Test"
      And the "bobtest@testbusiness.com" Account has the "Repair Order Creator"
        permission
      And you log in as "bobtest@testbusiness.com"
      And you start scheduling a new Repair Order

  Scenario: Enter the Select Technician page when Use PD is selected
    Given you select Use PD
    When you enter the Select Technician page
    Then the PD Filter should be visible
      And the PD Filter should be selected

  Scenario: Basic Search for Technicians when PD Filter is selected
    Given a Technician named "PD Technician"
      And the Technician named "PD Technician" supports PD
      And a Technician named "Non-PD Technician"
      And the Technician named "Non-PD Technician" does not support PD
      And you select Use PD
      And you enter the Select Technician page
      And you select the PD Filter
      And you select Basic Search
    When you search for Technicians with the name "Technician"
    Then your search results should contain "PD Technician"
      And your search results should not contain "Non-PD Technician"

Но в Gherkin wiki рекомендуется:

Избегать говорить о взаимодействии с пользователем в givens

Далее они делают исключение:

Войти в систему пользователя (Исключение из рекомендации об отсутствии взаимодействия. Вещи, которые "произошли ранее", являются нормальными).

На этой странице также говорится, что:

Цель шагов When - описать ключевое действие, выполняемое пользователем

Что должно быть в Given, а что в When, если у вас много взаимодействия с пользовательским интерфейсом?

В моем первом сценарии выбор Use PD требует взаимодействия с пользовательским интерфейсом, поскольку является частью мастера создания нового заказа на ремонт. Однако он является предварительным условием для того, чтобы фильтр PD Filter был виден, и запускается, когда пользователь входит на страницу Select Technician.

Первый сценарий может быть не так уж плох, но второй сценарий усугубляет проблему. Поиск запускается при нажатии кнопки Search, но для перехода на эту страницу необходимо выполнить множество взаимодействий пользовательского интерфейса. Некоторые из этих взаимодействий также нельзя обойти вниманием, поскольку для появления фильтра поиска необходимо выбрать Use PD. Но эти взаимодействия пользовательского интерфейса не являются ключевым действием сценария.

5
задан Merlyn Morgan-Graham 27 February 2012 в 20:49
поделиться