31 подписчик

Gherkin. Шаги, предыстория.

Как было сказано ранее, Примеры состоят из шагов.

Каждый шаг начинается с ключевого слова Пусть (Дано, Допустим), Когда, Тогда, И, Но.

Шаги выполняются последовательно, каждый следующий шаг выполняется только после того, как завершился предыдущий.

Важно! Описания шагов с разными ключевыми словами не должны повторяться. Например:

Пусть у меня на счету есть деньги
Тогда у меня на счету есть деньги

Такие шаги будут считаться идентичными.

Лучше использовать такой вариант:

Пусть у меня на счету есть деньги
Тогда мой баланс больше 0

Пусть (Дано, Допустим)

Ключевое слово Пусть используется для описания исходного состояния системы. Возможно, для приведения системы в это состояние потребуются какие-либо действия: редактирование конфигов, создание тестовых данных и т.д.

Цель данного шага - привести систему в необходимое состояние, чтобы пользователь или внешняя система могли далее взаимодействовать с ней. В шагах Пусть следует избегать описания взаимодействия пользователя с системой, т.к. это лишь предусловия.

Хорошие примеры предусловий:

- Пользователь авторизован в системе
- На счету пользователя 100 рублей

Плохие примеры предусловий:

- Перейти по ссылке https://.. , нажать кнопку <...> и ввести логин и пароль
- Создать счет пользователя и пополнить его на 100 рублей

Когда

Шаги Когда описывают события или действия. Это может быть действие, которое пользователь совершает в системе, или событие, вызванное другой системой.

Очень рекомендуется использовать только один шаг Когда в каждом сценарии. Если вы чувствуете необходимость в нескольких таких шагах, то это значит, что данный сценарий надо разбить на несколько меньших сценариев.

Например:

- Когда пользователь угадает слово
- Когда пользователь пригласит друга
- Когда пользователь снимет деньги со счета

Тогда

Шаги Тогда описывают целевое состояние системы, или результат.

Шаг Тогда должен содержать видимый результат, т.е. какие-либо выходные данные. Это может быть отчет, сообщение пользователю, но не что-то, скрытое глубже (например, запись в базе данных).

Если возникает желание написать в шаге Тогда "Посмотрите в БД", надо бороться с этим желание. Выходные данные должны быть доступны пользователю или внешней системе, а БД, как правило, от них скрыта.

Пример:

- Увидеть, что отгадано неправильное слово
- Получить приглашение
- Увидеть оповещение системы

И, Но

Если в одном сценарии несколько шагов Пусть, Когда или Тогда, то можно написать так:

Пример: Множественные шаги
Пусть есть одна вещь
Пусть есть другая вещь
Пусть есть третья вещь
Когда я открываю глаза
Тогда я должна увидеть что-то одно
Тогда я не должна видеть что-то другое

Или можно сделать этот текст более читаемым

Пример: Множественные шаги
Пусть есть одна вещь
И есть другая вещь
И есть третья вещь
Когда я открываю глаза
Тогда я должна увидеть что-то одно
Но я не должна видеть что-то другое

Предыстория

Может случиться так, что шаги Пусть будут повторяться во всех сценариях одной функции. Т.к. они повторяются, это значит, что данные шаги не существенны для конкретного сценария. Эти шаги можно объединить в секцию Предыстория.

Предыстория позволяет добавлять контекст в сценарии функции и может включать в себя один или несколько шагов Пусть. В одной функции может быть только одна предыстория. Если для некоторых сценариев необходимы разные предыстории, то их нужно разнести по разным функциям

Эту функцию мне стало лень переводить на русский, так что as is.

Функция: Multiple site support
Only blog owners can post to a blog, except administrators,
who can post to all blogs.

Предыстория:
Пусть a global administrator named "Greg"
И a blog named "Greg's anti-tax rants"
И a customer named "Dr. Bill"
И a blog named "Expensive Therapy" owned by "Dr. Bill"

Пример: Dr. Bill posts to his own blog
Пусть I am logged in as Dr. Bill
КогдаI try to post to "Expensive Therapy"
Тогда I should see "Your article was published."

Пример : Dr. Bill tries to post to somebody else's blog, and fails
Пусть I am logged in as Dr. Bill
Когда I try to post to "Greg's anti-tax rants"
Тогда I should see "Hey! That's not your blog!"

Пример : Greg posts to a client's blog
Пусть I am logged in as Greg
Когда I try to post to "Expensive Therapy"
Тогда I should see "Your article was published."

Советы по использованию Предыстории

  • Не используйте сложные предыстории и избегайте излишней детализации (если для клиента это не важно)

Например, если название сайта и имя пользователя не имеют
принципиального значения, используйте высокоуровневые
конструкции типа "Пусть я авторизован как владелец сайта"

  • Секция предыстории должна быть короткой

Предысторию необходимо всегда держать в памяти при исполнении
или чтении сценария. Если длина предыстории больше 4 строк, убрать
несущественные детали (см. предыдущий пункт)

  • Придайте предыстории жизни

Используйте запоминающиеся имена и попробуйте рассказать
историю. Человеческий мозг гораздо лучше понимает истории, чем
отвлеченные имена типа "Пользователь А"

  • Создавайте короткие сценарии

Если секция Предыстории после прокрутки "уехала" с экрана, читатель
уже не представляет в полной мере, что происходит. Возможно, стоит
использовать более высокоуровневые конструкции или описать
функцию в новом файле.