Обычно существует 2 подхода:
Если вы хотите, чтобы набор шагов выполнялся до каждого сценария в файле объекта:
Background:
given my app has started
then enter "guest" in "user-field"
and enter "1234" in "password-field"
and press "login"
then I will see "welcome"
Scenario: Some scenario
then *** here's the work specific to this scenario ***
Scenario: Some other scenario
then *** here's the work specific to this scenario ***
Если вам нужно, чтобы «блок» шагов использовался в разных файлах объектов, или раздел «Фон» не подходит, поскольку в некоторых сценариях он не нужен, то создайте определение шага высокого уровня, которое вызывает другие:
Given /^I have logged in$/ do
steps %Q {
given my app has started
then enter "guest" in "user-field"
and enter "1234" in "password-field"
and press "login"
then I will see "welcome"
}
end
Кроме того, в этом случае у меня будет соблазн не вообще реализовывать ваши общие шаги как отдельные шаги, а создать определение одного шага: (при условии, что Капибара)
Given /^I have logged in$/ do
fill_in 'user-field', :with => 'guest'
fill_in 'password-field', :with => '1234'
click_button 'login'
end
Это придает немного больше значения вашим определениям шагов, а не создает последовательность взаимодействий страниц, которые необходимо мысленно проанализировать, прежде чем вы поймете: «О, этот раздел регистрирует меня».