Как использовать общие/общие "блоки" между функциями огурца?

Я новичок в огурце, но наслаждаюсь им.

В настоящее время я пишу некоторые тесты Фрэнка и хотел бы повторно использовать блоки огурца script через несколько функций - я бы хотел сделать это, если возможно, уровень огурца (не внутри рубина).

Например, у меня может быть 4 сценария, которые начинаются с выполнения тех же шагов входа:

  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"
  then *** here the work specific to each script ***

Есть ли способ поделиться этими первыми 5 строками через несколько сценариев? Какой-то синтаксис "включить"?

Ответы

Ответ 1

Обычно существует 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 the work specific to this scenario ***

Scenario: Some other scenario
    then *** here 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

Кроме того, в этом случае у меня возникнет соблазн не выполнять общие действия как отдельные шаги вообще, а создать одноэтапное определение: (при условии Capybara)

Given /^I have logged in$/ do
    fill_in 'user-field', :with => 'guest'
    fill_in 'password-field', :with => '1234'
    click_button 'login'
end

Это дает немного больше значения вашим определениям шагов, а не создает последовательность взаимодействий страниц, которые необходимо мысленно проанализировать, прежде чем вы поймете: "О, этот раздел регистрирует меня".

Ответ 2

Предлагается более эффективный подход к использованию "методов" уровня ruby ​​для повторного использования кода вместо вложенных шагов с точки зрения обслуживания и отладки кода.

Вот ссылка на более подробную информацию: Повторное использование шагов огурца