Есть ли способ указать, например, (автомобиль | автомобили) в определении шага огурца? - PullRequest
0 голосов
/ 19 марта 2020

Итак, у меня есть 2 сценария ios .... один начинается

Given I have 1 car

Другой начинается

Given I have 2 cars

Я бы хотел, чтобы они использовали один и тот же шаг определение - ie что-то вроде этого

 Given('I have {int} (car|cars)',

Я знаю, что можно указать 2 возможных значения (ie машина или автомобили), но я не могу на всю жизнь вспомнить, как. Кто-нибудь знает? Я использую машинопись, транспортир, angular, селен.

Также пробовал

Given(/^I have {int} (car|cars)$

Ответы [ 3 ]

3 голосов
/ 19 марта 2020

В cukeExp () становятся необязательными символами. Это то, что вы хотите.

Таким образом, ваше выражение будет

Given('I have {int} car(s)')

Рад помочь - Более подробную информацию можно найти здесь: https://cucumber.io/docs/cucumber/cucumber-expressions/ - Переключиться на JS код вверху.

Люк - автор огурцов.

2 голосов
/ 19 марта 2020

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

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

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

Я бы предпочел и использовал в своих проектах

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-сложные определения шагов с большим количеством параметров, регулярных выражений и | или выражений.

0 голосов
/ 19 марта 2020

Насколько мне известно, ваше определение шага должно быть таким, как показано ниже.

Given(/^I have "([^"]*)?" (car|cars)*$/, (number, item) => {

Вы все еще можете упростить первое регулярное выражение.

Ура!

...