Я хочу повторно использовать некоторые шаги Cucumber, но не могу найти правильный способ.
Я хочу написать такой шаг:
Given /^I login with (.*) credentials$/ |type|
# do stuff with type being one of "invalid" or "valid"
end
Но затем сделайте еще один шаг, например:
Given /^I login successfully$
# call "Given I login with valid credentials"
end
Поэтому при тестировании аутентификации пользователя я могу использовать первое, но в большинстве других мест я могу использовать второе, и на самом деле мне не нужно воспроизводить код.
Есть ли способ вызвать этот другой шаг, или я просто помещаю логику во вспомогательный метод и вызываю указанный метод из каждой задачи (в основном рефакторинг извлечения метода, который после прочтения моего вопроса заставляет меня поверить, что на самом деле лучший способ тем не мение)?
do
необходимое для запускаdo...end
блока, в определении шага Ruby. На самом деле это необходимо.Ответы:
ОБНОВЛЕНИЕ : описанный ниже метод устарел. Рекомендуемый способ вызова шага из другого шага теперь выглядит так:
Старый, устаревший метод (для справки):
Вы можете вызывать шаги из других шагов следующим образом:
Если все сценарии внутри функции требуют этого (или других шагов), вы также можете добавить фон для каждой функции, выполнив общие шаги, например:
источник
steps %Q{Given I am logged in}
steps
метода не существовало. Смотрите мой ответ ниже.Обратите внимание, что метод вызова шагов внутри шагов был изменен в последних версиях огурца, что вы увидите, если получите сообщение об ошибке типа «ПРЕДУПРЕЖДЕНИЕ: использование« Дано / Когда / Тогда »в определениях шагов устарело, используйте« шаг »для вместо этого вызовите другие шаги: /path/to/step_definitions/foo_steps.rb: 631: in `block in '". Подробности смотрите в вики по огурцам .
Суть изменения в том, что теперь вы должны использовать методы
step
илиsteps
.источник
syntax error, unexpected tIDENTIFIER, expecting keyword_end
stackoverflow.com/questions/43319331/…Вызов шагов из определений шагов - плохая практика и имеет некоторые недостатки :
Аслак Хеллесой рекомендует извлекать популярные действия в World вместо повторного использования шагов. Он изолирует эти действия в одном месте, что упрощает поиск этого кода. Вы также можете извлекать код из обычных классов или модулей Ruby.
Вот полезное обсуждение этой темы в списке рассылки Cucumber - ссылка
источник
Лучше всего заключать шаги в% {}, а не в кавычки. Тогда вам не нужно избегать двойных кавычек, которые вам нужно часто использовать:
источник
Повторно используйте ключевые слова в файле функций, что обеспечит возможность повторного использования кода.
Настоятельно НЕ рекомендуется вызывать определения шагов в пределах шагов.
Я бы написал свой файл функций таким образом,
В моем определении шага (это Java)
Таким образом, есть много возможностей повторного использования кода. Ваши же Given and Then обрабатывают как допустимые, так и недопустимые сценарии. В то же время ваш файл характеристик имеет смысл для читателей.
источник