Мне кажется, что вы должны стремиться сделать все свои тесты самодостаточными, а также стремиться к подходу, основанному на деятельности, а не на задачах.Я бы рекомендовал что-то вроде этого:
(Примечание: я использую Groovy здесь, потому что мне не очень удобно с Ruby)
Scenario: User just uploaded avatar
Given I just uploaded "spec/fixtures/kitten.jpg" as my avatar
When I crop it to 100x100 px
And I press "Crop"
Then my avatar should have 100x100 px
And I should see "Picture successfuly cropped."
Определение шага должно вызывать метод, который может бытьповторное использование:
Given(~'I just uploaded "(.+)" as my avatar') { avatar ->
uploadAvatar(avatar)
}
def uploadAvatar(avatar) {
//place the previous steps in here.
}
Кажется, намного проще, чем то, что вы делали для меня.
Примечание: действие против задачи можно объяснить следующим примером: представьте, что мы тестируем банкомат.Действия: «Идентифицировать в банк», «Снять деньги» и т. Д., Задачи: «Подход банкомат», «Ввести пин-код», «проверить пин-код», «выбрать сумму», «нажмите ОК» и т. Д ...,
Для меня действия лучше объясняют поведение системы и оставляют интерфейс открытым, что означает, что ваши тесты менее хрупкие.