Ответ Люка великолепен и, безусловно, является стандартной практикой, когда ты кукарекаешь.
Я бы (и хотел) использовать другой подход. Я бы настоятельно утверждал, что сложность даже одного выражения, подобного тому, которое он использует, не стоит пошагового дублирования. Позвольте мне объяснить и проиллюстрировать.
Фундаментальная идея этого подхода заключается в том, что внутренним элементом каждого определения шага должен быть один вызов вспомогательного метода. Когда вы делаете это, вам больше не нужны выражения или регулярные выражения.
Я бы предпочел и использовал в своих проектах
module CarStepHelper
def create_car(amount: 1)
Lots of stuff to create cars
end
end
World CarStepHelper
Given 'I have one car' do
create_car
end
Given 'I have two cars' do
create_car(amount: 2)
end
,
Given('I have {int} car(s)')
lots of stuff to create cars
end
, потому что
- определения шагов проще (без регулярного выражения, без выражения огурца
- материал для создания машин немного проще (без обработки регулярного выражения или выражения)
- вспомогательный метод поддерживает и поощряет более широкий диапазон выражений, например
Given Fred has a car
Given there is a blue car and a red car
- , вспомогательный метод способствует лучшей связи между шагами, потому что вы можете назначить его результаты относительно определения шага, например
Given Fred has a car
@freds_car = create_car
end
Given there are two cars
[@car1, @car2] = create_car(amount: 2)
end
Выражения огурцов и регулярные выражения огурцов очень мощные и довольно простые в использовании, но вы можете очень эффективно использовать Cuke, даже не используя их. Эффективность определения шага - это миф, а часто и анти-шаблон, если вы гарантируете каждый шаг определения шага это всего лишь один звонок, вам больше не нужно беспокоиться об этом, и вы избежите ошибки, в которую впадают многие кукеры, которая является писанием ове. r-сложные определения шагов с большим количеством параметров, регулярных выражений и | или выражений.