Как работать со сценариями с огурцами, у которых есть много шагов в стадии «тогда» - PullRequest
0 голосов
/ 14 октября 2018

Они говорят , что основным правилом БДД является:

Один сценарий, одно поведение!

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

Scenario: Buying a single product to be delivered now
    Given I am in the checkout page 
    When I checkout the order
    Then the order should be created to the specified address 
    And the order should be set in pending state
    And ops must be notified via a slack notification
    And A shopper must be auto assigned the order via a push notification
    And A retailer must be notified about the order via a push notification 
    And A transaction must be recorded in the payment gateway
    And My wallet should be deducted by the payment amount

Это выглядит ужасно.Но теперь я не уверен, как отделить это.Выполнение Background , кажется, не обрезает его, поскольку в фоновом режиме вы настраиваете основу только для нескольких сценариев, где каждый сценарий будет иметь , когда и затем pair (В моем случае я использую Behat, , который имеет a , заданный , , когда и , затем в каждом сценарии послефон).

Советы?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

В дополнение к ответу @Stratadox (разделение сценариев по поведению) - Given шаг никогда не должен ссылаться на пользовательский интерфейс или этап в пути пользователя.Страница, на которой находится пользователь, не имеет отношения к бизнес-логике.

Шаг Given (например, шаг Arrange в модульном тестировании) используется для настройки системы в заданном состоянии.Это состояние, установленное на шаге Given, определяет результат (шаг Then)

Например:

«заказ должен быть создан по указанному адресу» - этот результат можетпроизошли вследствие того, что клиент правильно ввел свой адрес (и в этом случае может потребоваться указать фактический адрес, чтобы его можно было подтвердить на шаге Then).

«Мой кошелек должен быть вычтен из суммы платежа» - чтобы утверждать, что система находится в правильном состоянии после пополнения вашего кошелька, мы, вероятно, проверили бы какое-то сохранение данных, и мы такжепроверить на конкретную сумму.Какая сумма?Сумма, указанная вами на шаге Given, напрямую связана с исходом этого сценария

Scenario: Being charged the correct amount on successful purchase of product
   Given I have £10 in my wallet
   When I purchase a Toaster Oven for £4
   Then I should have £6 left in my wallet

«Покупателю необходимо автоматически назначить заказ посредством push-уведомления» - это результат, которыйможет быть заявлен как часть проверки «успешной покупки».От этого зависит только, была ли покупка успешной или нет.И вы можете связать вместе утверждения типа «Уведомление покупателя, записанная транзакция с уведомлением продавца» - и дать им одно имя, одну строку в вашем сценарии, например:

Given Jon has the following items in his basket:
  | Macbook Pro | £3000 |
When Jon checks out his basket
Then a purchase of "xyz" for £3000 by Jon should have gone through

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

0 голосов
/ 15 октября 2018

Самый простой способ решить эту проблему - следовать совету, который вы цитировали в своем вопросе:

Один сценарий, одно поведение!

Для реализации этого советапросто разделите раздутый сценарий на несколько более мелких.

Например:

Scenario: Buying a single product to be delivered now
    Given I am in the checkout page 
    When I checkout the order
    Then the order should be created to the specified address 
    And the order should be set in pending state

Scenario: Notifying ops of the purchase
    Given I am in the checkout page 
    When I checkout the order
    Then ops must be notified via a slack notification

... и т. д.

Многие из given вваш сценарий не очень связан друг с другом.У них есть некоторые временные отношения, потому что все они случаются сразу после размещения заказа, но это все.

Можно даже пойти на шаг дальше и рассмотреть возможность группировки их в различные функции.

В конце концов, уведомление ops - это отличительная особенность от обработки платежей, что, в свою очередь, отличается от расчета запасов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...